MySQL 觸發(fā)器

觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對(duì)象,在滿足定義條件時(shí)觸發(fā),并執(zhí)行觸發(fā)器中定義的語句集合

創(chuàng)建觸發(fā)器

創(chuàng)建觸發(fā)器的語法如下:

create trigger trigger_name
trigger_time trigger_event on tbl_name 
FOR EACH ROW 
trigger_stmt

注意:觸發(fā)器只能創(chuàng)建在永久表(Permanent Table)上,不能對(duì)臨時(shí)表(Temporary Table)創(chuàng)建觸發(fā)器

其中 trigger_time 是觸發(fā)器的觸發(fā)時(shí)間,可以是 before 或者 after,before 的含義指在檢查約束前觸發(fā),而 after 是在檢查約束后觸發(fā)

trigger_event 就是觸發(fā)器的觸發(fā)事件,可以是 insert,update 或者 delete

對(duì)同一個(gè)表相同觸發(fā)時(shí)間的相同觸發(fā)事件,只能定義一個(gè)觸發(fā)器

使用別名 oldnew 來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容

刪除觸發(fā)器

一次可以刪除一個(gè)觸發(fā)程序,如果沒有指定 schema_name,默認(rèn)為當(dāng)前數(shù)據(jù)庫,具體語法如下:

drop trigger [schema_name.]trigger_name

查看觸發(fā)器

可以通過執(zhí)行 show triggers 命令查看觸發(fā)器的狀態(tài),語法等信息

另外一個(gè)查看方式是查詢系統(tǒng)表的 information_schema.triggers

觸發(fā)器的使用

觸發(fā)器執(zhí)行的語句有以下兩個(gè)限制

  • 觸發(fā)程序不能調(diào)用將數(shù)據(jù)返回客戶端的存儲(chǔ)程序,也不能使用采用 call 語句的動(dòng)態(tài) SQL語句,但是允許存儲(chǔ)程序通過參數(shù)將數(shù)據(jù)返回觸發(fā)程序。也就是存儲(chǔ)過程或者函數(shù)通過 out 或者 inout 類型的參數(shù)將數(shù)據(jù)返回觸發(fā)器是可以的,但是不能調(diào)用直接返回?cái)?shù)據(jù)的過程
  • 不能在觸發(fā)器中使用以顯式或隱式方式開始或結(jié)束事務(wù)的語句,如 start transaction,commit 或 rollback

MySQL 的觸發(fā)器是按照 before 觸發(fā)器,行操作,after 觸發(fā)器的順序執(zhí)行的,其中任何一步操作發(fā)生錯(cuò)誤都不會(huì)繼續(xù)執(zhí)行剩下的操作。如果是對(duì)事務(wù)表進(jìn)行的操作,那么會(huì)整個(gè)作為一個(gè)事務(wù)被回滾(Rollback),但是如果是對(duì)非事務(wù)表進(jìn)行的操作,那么已經(jīng)更新的記錄將無法回滾,這也是設(shè)計(jì)觸發(fā)器的時(shí)候需要注意的問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容