天天看點

MySql的觸發器

觸發器是由事件來觸發某個操作。這些事件包括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在執行過程中将會在目前庫中查找觸發器。

上一篇: MySql的事務
下一篇: MySql的視圖