Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql create trigger Syntaxfehler

Wenn Sie versuchen, Fehler über SIGNAL auszulösen Sie müssen den SQLSTATE angeben das ist der Fehlercode und für die benutzerdefinierten generischen Fehlercodes sein 45000 zusammen mit dem Nachrichtentext MESSAGE_TEXT

Der Trigger wird also zu

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 ;

Testfall

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

Lassen Sie uns jetzt den Trigger erstellen

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

Und nach dem Ausführen der obigen 2 Update-Befehle hier, wie die Tabelle aussieht

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

Beachten Sie, dass die 2. Aktualisierung fehlgeschlagen ist und die Zeile unverändert ist.

Lesen Sie mehr darüber https://dev.mysql.com/doc /refman/5.5/en/signal.html