在mysql中使用觸發器

MYSQL是在5.0以後的版本中引入觸發器的。

有的時候,可以用觸發器來維護數據的完整性。如我有一個表ge_element,該表中有一個region_id,對應到ge_region表中的id,但是,region_id是可以爲空的,所以不應該設置外鍵約束,而我在刪除ge_region表中的記錄時,希望把在ge_element表中被引用到的記錄的region_id設爲0,因爲沒有數據庫的外鍵約束,我只能在程序中操作,但我又不想通過程序來操作,因爲引用region_id的表可能不只ge_element一個,這時,就可能用到觸發器,在刪除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表示在事件發生之前執行觸發器,After表示在事件發生之後執行觸發器;

 

3.觸發事件:

三個事件:insert, update, delete

 

4.觸發器與表的關係:

觸發器是屬於一個表的,當在這個表上執行insert, update, delete操作時,就會導致相應的觸發器被激活;

不能給同一個表的同一個操作創建兩個不同的觸發器。

 

5.觸發間隔:

FOR EACH ROW 子句通知觸發器每隔一行執行一次動作,而不是對整下表執行一次。

 

6.觸發的SQL語句:

觸發器包含所要觸發的SQL語句:這裏的語句可以是任何合法的語句,包括複合語句,但是這裏的語句受的限制和函數的一樣。

複合語句(BEGIN / END)是合法的.

流控制(Flow-of-control)語句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.

變量聲明(DECLARE)以及指派(SET)是合法的.

允許條件聲明.

異常處理聲明也是允許的.

但是在這裏要記住函數有受限條件:不能在函數中訪問表.因此在函數中使用以下語句是非法的。

 

7.創建觸發器的權限:

你必須要有相當大的權限才能夠創建觸發器;我在創建觸發器的時候提示要有super privilege纔可以創建;

發佈了6 篇原創文章 · 獲贊 3 · 訪問量 5440
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章