Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Dùng trigger chặn INSERT hoặc UPDATE trong MySQL

Dùng lệnh SIGNAL SQL STATE để chặn INSERT/UPDATE. Cú pháp trigger:

DELIMITER // CREATE TRIGGER yourTriggerName BEFORE INSERT ON yourTableName FOR EACH ROW BEGIN yourCondition THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'anyMessageToEndUser'; END // DELIMITER ;

Tạo trigger chặn chèn nếu Id < 1 hoặc > 5:

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 ;

Tạo bảng:

mysql> create table Insert_Prevent    -> (    -> Id int    -> ); Query OK, 0 rows affected (0.62 sec)

Thử chèn Id = 0 và 6 (bị chặn):

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

Chèn Id 1-5 (thành công):

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)

Kiểm tra dữ liệu:

mysql> select *from Insert_Prevent;
+------+ | Id   | +------+ |    1 | |    5 | | 2 | | 3 | +------+ 4 rows in set (0.00 sec)