觸發器是由事件來觸發某個操作。這些事件包括INSERT語句、UPDATE語句和DELETE語句。當資料庫系統執行這些事件時,就會激活觸發器執行相應的操作。
在MySQL中,建立隻有一個執行語句的觸發器的基本形式如下:
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件 ON 表名 FOR EACH ROW 執行語句
具體的參數說明如下:
觸發器名:指定要建立的觸發器名字。
參數BEFORE和AFTER:指定觸發器執行的時間。BEFORE指在觸發時間之前執行觸發語句;AFTER表示在觸發時間之後執行觸發語句。
觸發事件:指資料庫操作觸發條件,其中,包括INSERT,UPDATE和DELETE。
表名:指定觸發時間操作表的名稱。
FOR EACH ROW:表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器。
建立具有多個執行語句的觸發器
CREATE TRIGGER 觸發器名稱 BEFORE|AFTER 觸發事件 ON 表名 FOR EACH ROW
BEGIN
執行語句清單;
END
在MySQL中,一個表在相同的時間和相同的觸發時間隻能建立一個觸發器,如觸發時間INSERT,觸發時間為AFTER的觸發器隻能有一個,但是可以定義BEFORE的觸發器。
在MySQL中,可以執行SHOW TRIGGERS語句檢視觸發器的基本資訊,其基本形式如下:
SHOW TRIGGERS;
在指令提示符中輸入SHOW TRIGGERS語句即可檢視選擇資料庫中的所有觸發器,但是,應用該檢視語句存在一定弊端,即隻能查詢所有觸發器的内容,并不能指定檢視某個觸發器的資訊。這樣一來,就會在使用者查找指定觸發器資訊的時候帶來極大不便。故推薦隻在觸發器數量較少的情況下應用SHOW TRIGGERS語句查詢觸發器基本資訊。
在MySQL中,所有觸發器的定義都存在該資料庫的triggers表中。讀者可以通過查詢triggers表來檢視資料庫中所有觸發器的詳細資訊。查詢語句如下所示:
SELECT * FROM information_schema.triggers;
其中,information_schema是MySQL中預設存在的庫,而information_schema是資料庫中用于記錄觸發器資訊的資料表。通過SELECT語句檢視觸發器資訊,如果使用者想要檢視某個指定觸發器的内容,可以通過where子句應用TRIGGER字段作為查詢條件。代碼如下:
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='觸發器名稱';
其中,“觸發器名稱”這一參數為使用者指定要檢視的觸發器名稱,和其他SELECT查詢語句相同,該名稱内容需要用一對“''”(單引号)引用指定的文字内容。
在MySQL中,觸發器按以下順序執行:BEFORE觸發器、表操作、AFTER觸發器操作。其中,表操作包括常用的資料庫操作指令如INSERT、UPDATE、DELETE。
觸發器中不能包含START TRANSCATION、COMMIT或ROLLBACK等關鍵詞,也不能包含CALL語句。觸發器執行非常嚴密,每一環都息息相關,任何錯誤都可能導緻程式無法向下執行。由于已經更新過的資料表是不能復原的,故在設計過程中一定要注意觸發器的邏輯嚴密性。
在MySQL中,既然可以建立觸發器,同樣也可以通過指令删除觸發器,即删除原來已經在某個資料庫中建立的觸發器,與MySQL中删除資料庫的指令相似,删除觸發器應用DROP關鍵字。其文法格式如下:
DROP TRIGGER 觸發器名稱
“觸發器名稱”參數為使用者指定要删除的觸發器名稱,如果指定某個特定觸發器名稱,MySQL在執行過程中将會在目前庫中查找觸發器。