如何在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)
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP