Wenn Sie versuchen, Fehler zu erhöhen, über SIGNAL
müssen Sie die SQLSTATE
spezifizieren, die der Fehlercode und für den Benutzer allgemeinen Fehlercodes definierten seine 45000
zusammen mit dem Nachrichtentext MESSAGE_TEXT
so ist der Auslöser wird als
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 ;
Test Case
mysql> select * from games;
+----+------+------+
| id | xid | val |
+----+------+------+
| 1 | NULL | 1 |
| 2 | NULL | 2 |
| 3 | NULL | 3 |
| 4 | 1 | 4 |
| 5 | 2 | 5 |
+----+------+------+
Ermöglicht den Trigger erstellen jetzt
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 obigen 2 Update-Befehle ausführen hier, wie die Tabelle
mysql> select * from games;
+----+------+------+
| id | xid | val |
+----+------+------+
| 1 | 4 | 1 |
| 2 | NULL | 2 |
| 3 | NULL | 3 |
| 4 | 1 | 4 |
| 5 | 2 | 5 |
+----+------+------+
Hinweis sieht, dass das zweite Update ist fehlgeschlagen und die Zeile unverändert.
Lesen Sie mehr über dieses https://dev.mysql.com/doc/refman/5.5/en/signal.html
, was der Fehler ist? –
Fehler 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, damit die richtige Syntax in der Nähe von '' error '' verwendet werden kann; –