MySQL的觸發(fā)器全解析(創(chuàng)建、查看觸發(fā)器)
觸發(fā)器的概念:
MySQL觸發(fā)器(Trigger)是一種與數(shù)據(jù)庫表關(guān)聯(lián)的特殊存儲程序,當(dāng)指定事件(如INSERT、UPDATE、DELETE)發(fā)生時由數(shù)據(jù)庫自動觸發(fā)執(zhí)行。它用于在數(shù)據(jù)變更前后執(zhí)行自定義邏輯,確保數(shù)據(jù)的一致性和業(yè)務(wù)規(guī)則。
觸發(fā)器是由事件來觸發(fā)某個操作,這些事件包括INSERT、UPDATE、DELETE事件。所謂事件就是指用戶的動作或者出發(fā)某項行為。如果定義了觸發(fā)程序,當(dāng)數(shù)據(jù)庫執(zhí)行這些語句的時候,就相當(dāng)于事件發(fā)生了,就會自動激發(fā)觸發(fā)器執(zhí)行相應(yīng)的操作。
創(chuàng)建觸發(fā)器:
CREATE TRIGGER 觸發(fā)器名稱
{BEFORE | AFTER}{INSERT | UPDATE | DELETE} ON 表名
FOR EACH ROW
觸發(fā)器執(zhí)行的語句塊;表名:表示觸發(fā)器監(jiān)控的對象。
BEFORE | AFTER:表示觸發(fā)的時間。BEFORE表示在事件之前觸發(fā),AFTER表示在事件之后觸發(fā)。
INSERT | UPDATE | DELETE:表示觸發(fā)的事件。INSERT插入記錄時觸發(fā),UPDATE更新記錄時觸發(fā),DELETE刪除記錄時觸發(fā)。
觸發(fā)器執(zhí)行的語句塊:可以是單條SQL語句,也可以是BEGIN...END結(jié)構(gòu)組成的復(fù)合語句塊。
如果使用了BEGIN...END:
DELIMITER $
CREATE TRIGGER 觸發(fā)器名
{BEFORE | AFTER} {INSERT | DELETE | UPDATE} ON 表名
FOR EACH ROW
BEGIN
執(zhí)行的SQL語句
END $
DELIMITER ;查看觸發(fā)器:
查看數(shù)據(jù)庫中已經(jīng)存在的觸發(fā)器的定義、狀態(tài)和語法信息等。
查看當(dāng)前數(shù)據(jù)庫的所有觸發(fā)器的定義:
SHOW TRIGGERS;
查看當(dāng)前數(shù)據(jù)中某個觸發(fā)器的定義:
SHOW CREATE TRIGGER 觸發(fā)器名;
從系統(tǒng)information_schema的TRIGGERS表中查詢"salary_check_trigger"觸發(fā)器的信息:
SELECT * FROM information_schema.TRIGGERS;
刪除觸發(fā)器:
DROP TRIGGER [IF EXISTS] 觸發(fā)器名;
優(yōu)點:
觸發(fā)器可以確保數(shù)據(jù)的完整性??梢詭椭涗洸僮魅罩?。還可以用在操作數(shù)據(jù)前,對數(shù)據(jù)進行合法性檢查。
缺點:
觸發(fā)器最大的一個問題就是可讀性差。因為觸發(fā)器存儲在數(shù)據(jù)庫中,并且由事件驅(qū)動,這就意味這觸發(fā)器有可能不受應(yīng)用層的控制。
相關(guān)數(shù)據(jù)的變更,可能會導(dǎo)致觸發(fā)器出錯。
注意:
如果在子表中定義了外鍵約束,并且外鍵制定了ON UPDATE/DELETE CASCADE/SET NULL子句,此時修改父表被引用的鍵值或者刪除附表被引用的記錄行時,也會引起子表的修改和刪除操作,此時基于子表的UPDATE和DELETE語句定義的觸發(fā)器并不會被激活。
總結(jié):
MySQL觸發(fā)器是一種與表關(guān)聯(lián)的特殊存儲程序,在指定事件(INSERT/UPDATE/DELETE)發(fā)生時自動執(zhí)行。通過CREATE TRIGGER語法創(chuàng)建,可設(shè)置在操作前(BEFORE)或后(AFTER)觸發(fā),支持單條SQL或復(fù)合語句塊。觸發(fā)器能確保數(shù)據(jù)一致性、記錄操作日志和數(shù)據(jù)校驗,但存在可讀性差、不易維護的缺點??赏ㄟ^SHOW TRIGGERS查看觸發(fā)器,使用DROP TRIGGER刪除。需注意外鍵約束可能影響觸發(fā)器的激活。
到此這篇關(guān)于MySQL的觸發(fā)器的文章就介紹到這了,更多相關(guān)mysql觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL如何快速創(chuàng)建800w條測試數(shù)據(jù)表
這篇文章主要介紹了MySQL如何快速創(chuàng)建800w條測試數(shù)據(jù)表,下面文章圍繞MySQL創(chuàng)建測試數(shù)據(jù)表的相關(guān)資料展開詳細內(nèi)容,具有一的的參考價值,需要的小伙伴可以參考一下2022-03-03
mysql問題之slow log中出現(xiàn)大量的binlog dump記錄的解決方法
今天在查看mysql中發(fā)現(xiàn)比較慢,然后我使用了slow log,發(fā)現(xiàn)出現(xiàn)了大量的binlog dump記錄,下面我來給大家整理一下這個問題的解決辦法2013-09-09
Windows服務(wù)器下MySql數(shù)據(jù)庫單向主從備份詳細實現(xiàn)步驟分享
將主服務(wù)器中的MySql數(shù)據(jù)庫同步到從服務(wù)器中,使得對主服務(wù)器的操作可以即時更新到從服務(wù)器,避免主服務(wù)器因環(huán)境或者網(wǎng)絡(luò)異常一時無法使用,達到備份效果,這篇文章整理的確實挺詳細的2012-05-05

