觸發(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ā)條件。
-
AFTER之后觸發(fā),即是指觸發(fā)器監(jiān)視的觸發(fā)事件執(zhí)行之后。 -
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é)生表(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';