Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql crée une erreur de syntaxe de déclencheur

Lorsque vous essayez de générer des erreurs via SIGNAL vous devez spécifier le SQLSTATE qui est le code d'erreur et pour les codes d'erreur génériques définis par l'utilisateur son 45000 avec le texte du message MESSAGE_TEXT

Ainsi, le déclencheur devient

delimiter //
create trigger lock_x_id before update on games
for each row
begin
 if old.xid is not null then
   signal SQLSTATE VALUE '45000' SET MESSAGE_TEXT = 'Your custom error message';
 end if;
end;//
delimiter ;

Cas de test

mysql> select * from games;
+----+------+------+
| id | xid  | val  |
+----+------+------+
|  1 | NULL |    1 |
|  2 | NULL |    2 |
|  3 | NULL |    3 |
|  4 |    1 |    4 |
|  5 |    2 |    5 |
+----+------+------+

Créons le déclencheur maintenant

mysql> delimiter //
mysql> create trigger lock_x_id before update on games
    -> for each row
    -> begin
    ->  if old.xid is not null then
    ->    signal SQLSTATE VALUE '45000' SET MESSAGE_TEXT = 'Your custom error message';
    ->  end if;
    -> end;//
Query OK, 0 rows affected (0.05 sec)


mysql> update games set xid = 4 where id = 1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update games set xid = 5 where id=5;
ERROR 1644 (45000): Your custom error message

Et après avoir exécuté les 2 commandes de mise à jour ci-dessus, voici à quoi ressemble le tableau

mysql> select * from games;
+----+------+------+
| id | xid  | val  |
+----+------+------+
|  1 |    4 |    1 |
|  2 | NULL |    2 |
|  3 | NULL |    3 |
|  4 |    1 |    4 |
|  5 |    2 |    5 |
+----+------+------+

Notez que la 2e mise à jour a échoué et que la ligne est inchangée.

En savoir plus à ce sujet https://dev.mysql.com/doc /refman/5.5/fr/signal.html