MySQL觸發器是一種數據庫對象,它可以在特定的情況下自動執行一些代碼。觸發器通常用于強制執行一些數據完整性和業務規則,以及向其他表中插入或更新數據。MySQL觸發器具有約束條件,這些條件約束觸發器何時執行,以及針對哪些數據執行。
MySQL的觸發器約束條件可以分為三種:
- BEFORE
- AFTER
- INSTEAD OF
BEFORE觸發器是在數據插入、更新或刪除之前執行的。這種觸發器通常用于驗證數據,并在數據被提交到數據庫之前拒絕它們。
AFTER觸發器是在數據插入、更新或刪除之后執行的。這種觸發器通常用于記錄數據更改,或者向其他表中插入數據。
INSTEAD OF觸發器是在數據插入、更新或刪除之前執行的。使用這種觸發器可以代替實際的數據庫操作,并在代替操作中進行驗證和處理。
CREATE TRIGGER `my_trigger`
BEFORE INSERT ON `my_table`
FOR EACH ROW
BEGIN
IF NEW.`id` = 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'id不能為0';
END IF;
END
上面的代碼演示了一個BEFORE觸發器。它會在數據插入到'my_table'表之前執行,并驗證其中的'id'是否為0。如果'id'為0,觸發器會發送一個錯誤信號。
CREATE TRIGGER `my_trigger`
AFTER UPDATE ON `my_table`
FOR EACH ROW
BEGIN
INSERT INTO `my_other_table` (`id`, `name`)
VALUES (NEW.`id`, NEW.`name`);
END
上面的代碼演示了一個AFTER觸發器。它會在數據更新后執行,并向另一個表'my_other_table'中插入更新后的'id'和'name'。
CREATE TRIGGER `my_trigger`
INSTEAD OF INSERT ON `my_table`
FOR EACH ROW
BEGIN
IF NEW.`id`< 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'id不能為負數';
ELSE
INSERT INTO `my_table` (`id`, `name`)
VALUES (NEW.`id`, NEW.`name`);
END IF;
END
上面的代碼演示了一個INSTEAD OF觸發器。它會在數據插入到'my_table'表之前執行,并驗證其中的'id'是否為負數。如果'id'為負數,觸發器會發送一個錯誤信號。否則,觸發器會插入新的數據。
上一篇mysql 觸發器跨庫
下一篇css里設置圖片