MySQL數(shù)據(jù)庫(kù)——觸發(fā)器

觸發(fā)器的定義

觸發(fā)器(Trigger)是用戶定義在關(guān)系表上的一類(lèi)由事件驅(qū)動(dòng)的特殊過(guò)程 , 若任何用戶對(duì)表的增、刪、改操作均由服務(wù)器自動(dòng)激活相應(yīng)的語(yǔ)句塊。

觸發(fā)器類(lèi)似于火災(zāi)報(bào)警裝置,即若報(bào)警裝置檢測(cè)到火災(zāi)則立即報(bào)警;換成觸發(fā)器即為:若觸發(fā)器檢測(cè)到用戶對(duì)某張表進(jìn)行相關(guān)操作時(shí),觸發(fā)器則立即執(zhí)行對(duì)應(yīng)的提前設(shè)置好的命令。

觸發(fā)器的定義

CREATE TRIGGER name /*觸發(fā)器名*/
[AFTER|BEFORE] [DELETE|INSERT|UPDATE]  ON 表名
FOR EACH ROW   #這句話在mysql是固定的  
BEGIN  
     -- 觸發(fā)器動(dòng)作 --
END;

注:[AFTER|BEFORE]是指觸發(fā)時(shí)序,[DELETE|INSERT|UPDATE]是觸發(fā)條件。

  1. AFTER 之后觸發(fā),即是指觸發(fā)器監(jiān)視的觸發(fā)事件執(zhí)行之后。
  2. BEFORE之前觸發(fā),即是指觸發(fā)器監(jiān)視的觸發(fā)事件執(zhí)行之前。

NEW和OLD

  • NEW:修飾符用來(lái)訪問(wèn)操作完成列后的值。
  • OLD:修飾符用來(lái)訪問(wèn)操作完成前列的值。
  • 用法:修飾符.列名
特性 INSERT UPDATE DELETE
NEW 有效 有效 NULL
OLD NULL 有效 有效

樣例

若當(dāng)前有兩張表:學(xué)生表(students)和成績(jī)表(scores),其中學(xué)生表主鍵為學(xué)號(hào)(sid),且 sid 為成績(jī)表的外鍵,詳細(xì)如下:

學(xué)生表
成績(jī)表

若我們要在學(xué)生表(students)中刪除一條信息,則對(duì)應(yīng)成績(jī)表(scores)中該學(xué)生的信息也留之無(wú)用也要對(duì)應(yīng)刪除,這是我們就可以設(shè)置一個(gè)刪除觸發(fā)器del_1

因?yàn)槲覀兪窃趯W(xué)生表(students)操作觸發(fā),所有我在學(xué)生表(students)上創(chuàng)建,同時(shí)是我們?cè)谧鰟h除動(dòng)作時(shí)觸發(fā)的所以要選用觸發(fā)條件為delete;同時(shí)為防止在刪除該學(xué)生信息時(shí)由外鍵引發(fā)一些錯(cuò)誤,所以我們選用BEFORE之前觸發(fā)。即具體代碼如下:

CREATE TRIGGER 'del_1'
BEFORE DELETE ON 'students'
FOR EACH ROW
BEGIN  
    delete from 'scores' where sid=old.sid;
END;

刪除觸發(fā)器

使用DROP TRIGGER語(yǔ)句可以刪除MySQL中定義的觸發(fā)器,基本語(yǔ)法形式如下:

DROP TRIGGER 觸發(fā)器名 ON 表名;

-- 例:刪除我們剛創(chuàng)建的觸發(fā)器 del_1
DROP TRIGGER 'del_1' ON 'students';
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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