程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL觸發器如何正確使用

MySQL觸發器如何正確使用

編輯:MySQL綜合教程

以下的文章主要描述的是如何對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才可以創建;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved