目錄
觸發器的概念:
創建觸發器:
查看觸發器:
查看當前數據庫的所有觸發器的定義:
查看當前數據中某個觸發器的定義:
從系統information_schema的TRIGGERS表中查詢"salary_check_trigger"觸發器的信息:
刪除觸發器:
優點:
缺點:
注意:
觸發器的概念:
MySQL觸發器(?Trigger?)是一種與數據庫表關聯的特殊存儲程序,當指定事件(如INSERT、UPDATE、DELETE)發生時由數據庫?自動觸發執行?。它用于在數據變更前后執行自定義邏輯,確保數據的一致性和業務規則。
觸發器是由事件來觸發某個操作,這些事件包括INSERT、UPDATE、DELETE事件。所謂事件就是指用戶的動作或者出發某項行為。如果定義了觸發程序,當數據庫執行這些語句的時候,就相當于事件發生了,就會自動激發觸發器執行相應的操作。
創建觸發器:
CREATE TRIGGER 觸發器名稱
{BEFORE | AFTER}{INSERT | UPDATE | DELETE} ON 表名
FOR EACH ROW
觸發器執行的語句塊;
表名:表示觸發器監控的對象。
BEFORE | AFTER:表示觸發的時間。BEFORE表示在事件之前觸發,AFTER表示在事件之后觸發。
INSERT | UPDATE | DELETE:表示觸發的事件。INSERT插入記錄時觸發,UPDATE更新記錄時觸發,DELETE刪除記錄時觸發。
觸發器執行的語句塊:可以是單條SQL語句,也可以是BEGIN...END結構組成的復合語句塊。
如果使用了BEGIN...END:
DELIMITER $
CREATE TRIGGER 觸發器名
{BEFORE | AFTER} {INSERT | DELETE | UPDATE} ON 表名
FOR EACH ROW
BEGIN
執行的SQL語句
END $
DELIMITER ;
查看觸發器:
查看數據庫中已經存在的觸發器的定義、狀態和語法信息等。
查看當前數據庫的所有觸發器的定義:
SHOW TRIGGERS;
查看當前數據中某個觸發器的定義:
SHOW CREATE TRIGGER 觸發器名;
從系統information_schema的TRIGGERS表中查詢"salary_check_trigger"觸發器的信息:
SELECT * FROM information_schema.TRIGGERS;
刪除觸發器:
DROP TRIGGER [IF EXISTS] 觸發器名;
優點:
觸發器可以確保數據的完整性。可以幫助記錄操作日志。還可以用在操作數據前,對數據進行合法性檢查。
缺點:
觸發器最大的一個問題就是可讀性差。因為觸發器存儲在數據庫中,并且由事件驅動,這就意味這觸發器有可能不受應用層的控制。
相關數據的變更,可能會導致觸發器出錯。
注意:
如果在子表中定義了外鍵約束,并且外鍵制定了ON UPDATE/DELETE CASCADE/SET NULL子句,此時修改父表被引用的鍵值或者刪除附表被引用的記錄行時,也會引起子表的修改和刪除操作,此時基于子表的UPDATE和DELETE語句定義的觸發器并不會被激活。
總結:
MySQL觸發器是一種與表關聯的特殊存儲程序,在指定事件(INSERT/UPDATE/DELETE)發生時自動執行。通過CREATE TRIGGER語法創建,可設置在操作前(BEFORE)或后(AFTER)觸發,支持單條SQL或復合語句塊。觸發器能確保數據一致性、記錄操作日志和數據校驗,但存在可讀性差、不易維護的缺點。可通過SHOW TRIGGERS查看觸發器,使用DROP TRIGGER刪除。需注意外鍵約束可能影響觸發器的激活。