Bạn cần sử dụng lệnh SIGNAL SQL STATE để dừng chèn hoặc cập nhật trong MySQL. Cú pháp kích hoạt như sau:
DELIMITER // CREATE TRIGGER yourTriggerName BEFORE INSERT ON yourTableName FOR EACH ROW BEGIN yourCondition THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'anyMessageToEndUser'; END // DELIMITER ;
Bây giờ, hãy tạo một trình kích hoạt có thể ngăn chặn việc chèn bản ghi vào bảng trong một số điều kiện. Truy vấn để tạo trình kích hoạt như sau:
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 '45000' -> SET MESSAGE_TEXT = 'You can not insert record'; -> END IF; -> END // Query OK, 0 rows affected (0.20 sec) mysql> DELIMITER ;
Trình kích hoạt trên sẽ dừng để chèn bất cứ khi nào bạn chèn bản ghi nhỏ hơn 0 hoặc lớn hơn 5.
Bây giờ chúng ta hãy tạo một bảng trước. Truy vấn để tạo bảng như sau:
mysql> create table Insert_Prevent -> ( -> Id int -> ); Query OK, 0 rows affected (0.62 sec)
Bây giờ hãy chèn bản ghi nhỏ hơn 0 hoặc lớn hơn 5. Điều này sẽ dẫn đến thông báo lỗi vì trình kích hoạt được tạo để ngừng chèn bất cứ khi nào bạn chèn bản ghi nhỏ hơn 0 hoặc lớn hơn 5. Thông báo lỗi như sau:
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
Nếu bạn chèn các bản ghi từ 1 đến 5, sẽ không có bất kỳ lỗi nào. Nó không ngăn chặn việc chèn các bản ghi vì như đã thảo luận ở trên, trình kích hoạt của chúng tôi được tạo để chèn các bản ghi từ 1 đến 5. Truy vấn để chèn bản ghi như sau:
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)
Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau:
mysql> select *from Insert_Prevent;
Sau đây là kết quả:
+------+ | Id | +------+ | 1 | | 5 | | 2 | | 3 | +------+ 4 rows in set (0.00 sec)