Khi bạn cố gắng sửa lỗi qua SIGNAL
bạn cần chỉ định SQLSTATE
là mã lỗi và đối với mã lỗi chung do người dùng xác định 45000
của nó cùng với nội dung tin nhắn MESSAGE_TEXT
Vì vậy, trình kích hoạt trở thành
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 ;
Trường hợp thử nghiệm
mysql> select * from games;
+----+------+------+
| id | xid | val |
+----+------+------+
| 1 | NULL | 1 |
| 2 | NULL | 2 |
| 3 | NULL | 3 |
| 4 | 1 | 4 |
| 5 | 2 | 5 |
+----+------+------+
Hãy tạo trình kích hoạt ngay bây giờ
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
Và sau khi chạy 2 lệnh cập nhật ở trên, bảng sẽ trông như thế nào
mysql> select * from games;
+----+------+------+
| id | xid | val |
+----+------+------+
| 1 | 4 | 1 |
| 2 | NULL | 2 |
| 3 | NULL | 3 |
| 4 | 1 | 4 |
| 5 | 2 | 5 |
+----+------+------+
Lưu ý rằng lần cập nhật thứ 2 không thành công và hàng không thay đổi.
Đọc thêm về điều này https://dev.mysql.com/doc /refman/5.5/en/signal.html