Maison > Questions et réponses > le corps du texte
Tableau utilisateur
CREATE TABLE `USERS` ( `ID` char(255) COLLATE utf8_unicode_ci NOT NULL, `NAME` char(255) COLLATE utf8_unicode_ci NOT NULL, `EMAIL` char(255) COLLATE utf8_unicode_ci DEFAULT NULL, `CREATED_IN` datetime NOT NULL, `SIGNED_IN` datetime NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Déclencheur
CREATE TRIGGER `ABC` BEFORE INSERT ON `USERS` FOR EACH ROW IF NEW.ID = "" OR NEW.NAME = "" OR NEW.CREATED_IN = "" OR NEW.CREATED_IN = "0000-00-00 00:00:00" OR NEW.SIGNED_IN = "" OR NEW.SIGNED_IN = "0000-00-00 00:00:00" THEN SIGNAL SQLSTATE "45000"; END IF
Colonne ID
("", " ", " ", " ", 等等...) -> 应该返回错误
("bf9 d 34 c9 08" = "bf9d34c908")
Colonne Nom
("", " ", " ", " ", 等等...) -> 应该返回错误
Barre de courrier électronique
("", " ", " ", " ", 等等...) -> 应该返回错误
("nkr owks lpehqp jmgdb @ gm ail.com" = "[电子邮件受保护]")
Colonnes CREATED_IN et SIGNED_IN
La version MySQL est 5.7
Quelle est la meilleure façon de gérer ces exigences sur le formulaire UTILISATEURS ?
P粉8458628262024-03-20 00:49:38
Un déclencheur peut ressembler à ceci :
CREATE TRIGGER process_input BEFORE INSERT ON USERS FOR EACH ROW BEGIN SET NEW.id = REPLACE(NEW.id, ' ', ''); IF NEW.id = '' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`id` cannot be empty.'; END IF; SET NEW.name = TRIM(NEW.name); IF NEW.name = '' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`name` cannot be empty.'; END IF; SET NEW.email = REPLACE(NEW.email, ' ', ''); IF NEW.email = '' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`email` cannot be empty.'; END IF; IF STR_TO_DATE(created_in, '%Y-%m-%d %H:%i:%s') IS NULL THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Incorrect `created_in` datetime value.'; END IF; IF STR_TO_DATE(signed_in, '%Y-%m-%d %H:%i:%s') IS NULL THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Incorrect `signed_in` datetime value.'; END IF; END
REMARQUE - Ce déclencheur permet à n'importe quelle valeur d'être NULL (mais seul l'e-mail peut être NULL, toutes les autres colonnes sont définies comme NON NULL).
Vous pouvez réorganiser les blocs et mettre en premier la condition avec la probabilité la plus élevée. Le déclencheur n'exécutera pas le code suivant après l'exécution de SIGNAL.