使用触发器停止 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 ornew.Id> 5) THEN

   -> SIGNAL SQLSTATE '45000'

   -> SET MESSAGE_TEXT = 'You can not insert record';

   -> END IF;

   -> END //

mysql> DELIMITER ;

每当您插入小于 0 或大于 5 的记录时,上述触发器将停止插入。

现在让我们先创建一个表。创建表的查询如下:

mysql> create table Insert_Prevent

   -> (

   -> Id int

   -> );

现在插入小于 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);

mysql> insert into Insert_Prevent values(5);

mysql> insert into Insert_Prevent values(2);

mysql> insert into Insert_Prevent values(3);

使用 select 语句显示表中的所有记录。查询如下:

mysql> select *from Insert_Prevent;

以下是输出:

+------+

| Id   |

+------+

|    1 |

|    5 |

|    2 |

|    3 |

+------+

4 rows in set (0.00 sec)

以上是 使用触发器停止 MySQL 中的插入或更新? 的全部内容, 来源链接: utcz.com/z/317460.html

回到顶部