以下的文章主要描述的是如何對MySQL觸發器進行正確使用, MySQL數據庫是在5.0 以後的相關版本中對MySQL觸發器進行引用,有時也可以用相關的觸發器對數據的完整性進行維護。如我有一個表ge_element。
該表中有一個region_id,對應到ge_region表中的id,但是,region_id是可以為空的,所以不應該設置外鍵約束,而我在刪除ge_region表中的記錄時,希望把在ge_element表中被引用到的記錄的region_id設為0,因為沒有數據庫的外鍵約束,我只能在程序中操作,但我又不想通過程序來操作,因為引用region_id的表可能不只ge_element一個,這時,就可能用到MySQL觸發器,在刪除ge_region表中的記錄時,把被引用的表中的region_id設為0。
1.創建觸發器的語句:
CREATE TRIGGER <觸發器名稱> <--
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON <表名稱>
FOR EACH ROW
<觸發器SQL語句>
觸發器必須有名字,最多64個字符,可能後面會附有分隔符.它和MySQL中其他對象的命名方式基本相象.
這裡我有個習慣:就是用表的名字+'_'+觸發器類型的縮寫.因此如果是表t26,觸發器是在事件UPDATE參考下面的點2)和3))之前BEFORE)的,那麼它的名字就是t26_bu。
可以直接在EMS中創建觸發器。
2.觸發時間:
Before表示在事件發生之前執行MySQL觸發器,After表示在事件發生之後執行觸發器;
3.觸發事件:
三個事件:insert, update, delete
4.觸發器與表的關系:
觸發器是屬於一個表的,當在這個表上執行insert, update, delete操作時,就會導致相應的觸發器被激活;
不能給同一個表的同一個操作創建兩個不同的觸發器。
5.觸發間隔:
FOR EACH ROW 子句通知MySQL觸發器每隔一行執行一次動作,而不是對整下表執行一次。
6.觸發的SQL語句:
觸發器包含所要觸發的SQL語句:這裡的語句可以是任何合法的語句,包括復合語句,但是這裡的語句受的限制和函數的一樣。
復合語句(BEGIN / END)是合法的.
流控制Flow-of-control)語句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.
變量聲明(DECLARE)以及指派(SET)是合法的.
允許條件聲明.
異常處理聲明也是允許的.
但是在這裡要記住函數有受限條件:不能在函數中訪問表.因此在函數中使用以下語句是非法的。
7.創建觸發器的權限:
你必須要有相當大的權限才能夠創建MySQL觸發器;我在創建觸發器的時候提示要有super privilege才可以創建;