使用触发器停止 MySQL 中的插入或更新?
mysqlmysqli database
您需要使用 SIGNAL SQL STATE 命令来停止 MySQL 中的插入或更新。触发器语法如下:
DELIMITER // CREATE TRIGGER yourTriggerName BEFORE INSERT ON yourTableName FOR EACH ROW BEGIN yourCondition THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'anyMessageToEndUser'; END // DELIMITER ;
现在,创建一个触发器,在某些条件下阻止在表中插入记录。创建触发器的查询如下:
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 ;
每当您插入小于 0 条或大于 5 条记录时,上述触发器将停止插入。
现在让我们先创建一个表。创建表的查询如下:
mysql> create table Insert_Prevent -> ( -> Id int -> ); Query OK, 0 rows affected (0.62 sec)
现在插入小于 0 或大于 5 的记录。这将导致错误消息,因为创建触发器以在您插入小于 0 或大于 5 的记录时停止插入。错误消息如下:
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
如果您在 1 到 5 之间插入记录,则不会出现任何错误。它不会阻止记录的插入,因为如上所述,我们创建触发器是为了在 1 到 5 之间插入记录。插入记录的查询如下:
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)
使用 select 语句显示表中的所有记录。查询如下:
mysql> select *from Insert_Prevent;
输出结果如下:
+------+ | Id | +------+ | 1 | | 5 | | 2 | | 3 | +------+ 4 rows in set (0.00 sec)