Maison >base de données >tutoriel mysql >Utiliser des déclencheurs pour arrêter les insertions ou les mises à jour dans MySQL ?
Vous devez utiliser la commande SIGNAL SQL STATE pour arrêter les insertions ou les mises à jour dans MySQL. La syntaxe du déclencheur est la suivante :
DELIMITER // CREATE TRIGGER yourTriggerName BEFORE INSERT ON yourTableName FOR EACH ROW BEGIN yourCondition THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'anyMessageToEndUser'; END // DELIMITER ;
Maintenant, créez un déclencheur pour empêcher l'insertion d'enregistrements dans la table dans certaines circonstances. La requête pour créer le déclencheur est la suivante :
mysql> DELIMITER // mysql> CREATE TRIGGER InsertPreventTrigger BEFORE INSERT ON Insert_Prevent -> FOR EACH ROW -> BEGIN -> IF(new.Id < 1 or new.Id > 5) THEN -> SIGNAL SQLSTATE '45000' -> SET MESSAGE_TEXT = 'You can not insert record'; -> END IF; -> END // Query OK, 0 rows affected (0.20 sec) mysql> DELIMITER ;
Chaque fois qu'un enregistrement inférieur à 0 ou supérieur à 5 est inséré, le déclencheur ci-dessus cessera de s'insérer.
Maintenant, créons d’abord un tableau. La requête pour créer la table est la suivante :
mysql> create table Insert_Prevent -> ( -> Id int -> ); Query OK, 0 rows affected (0.62 sec)
Insérez maintenant les enregistrements inférieurs à 0 ou supérieurs à 5. Cela entraînera un message d'erreur car chaque fois qu'un enregistrement inférieur à 0 ou supérieur à 5 est inséré, un déclencheur est créé pour arrêter l'insertion. Le message d'erreur est le suivant :
mysql> insert into Insert_Prevent values(0); ERROR 1644 (45000): You cannot insert record mysql> insert into Insert_Prevent values(6); ERROR 1644 (45000): You cannot insert record
Si vous insérez des enregistrements entre 1 et 5, aucune erreur ne se produira. Cela n'empêche pas l'insertion d'enregistrements car comme mentionné ci-dessus, nous créons des déclencheurs pour insérer des enregistrements entre 1 et 5. La requête pour insérer des enregistrements est la suivante :
mysql> insert into Insert_Prevent values(1); Query OK, 1 row affected (0.20 sec) mysql> insert into Insert_Prevent values(5); Query OK, 1 row affected (0.17 sec) mysql> insert into Insert_Prevent values(2); Query OK, 1 row affected (0.11 sec) mysql> insert into Insert_Prevent values(3); Query OK, 1 row affected (0.23 sec)
Utilisez l'instruction select pour afficher tous les enregistrements de la table. La requête est la suivante :
mysql> select *from Insert_Prevent;
Voici le résultat :
+------+ | Id | +------+ | 1 | | 5 | | 2 | | 3 | +------+ 4 rows in set (0.00 sec)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!