Maison >base de données >tutoriel mysql >Utiliser des déclencheurs pour arrêter les insertions ou les mises à jour dans MySQL ?

Utiliser des déclencheurs pour arrêter les insertions ou les mises à jour dans MySQL ?

PHPz
PHPzavant
2023-08-25 20:49:161241parcourir

使用触发器来停止 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 &#39;45000&#39;
   -> SET MESSAGE_TEXT = &#39;You can not insert record&#39;;
   -> 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer