如何在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+ 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.