如何在MySQL中使用触发器停止插入或更新操作?


您需要使用 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)

更新于: 2019-07-30

5K+ 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告