什麼是mysql觸發器
需要MySQL 5 對觸發器的支援是在MySQL 5中增加的。因此,本章內容適用於MySQL 5或之後的版本。
MySQL語句在需要時被執行,預存程序也是如此。但是,如果你想要某句語句(或某些語句)在事件發生時自動執行,怎麼辦呢?例如:
1.每當增加一個顧客到某個資料庫表時,檢查其電話號碼格式是否正確,州的縮寫是否為大寫;
2.每當訂購一個產品時,都會從庫存數量中減去訂購的數量;
3.無論何時刪除一行,都在某個存檔表中保留一個副本。
所有這些範例的共同點是它們都需要在某個表格發生變更時自動處理。這確切地說就是觸發器。觸發器是MySQL回應以下任一語句而自動執行的一條MySQL語句(或位於BEGIN 和END 語句之間的一組語句):
1.DELETE ;
#2.INSERT ;
3.UPDATE 。
其他MySQL語句不支援觸發器。
建立mysql觸發器
在建立觸發器時,需要給予4個訊息:
1.唯一的觸發器名稱;
2.觸發器關聯的表;
3.觸發器應該回應的活動( DELETE 、 INSERT 或UPDATE );
4.觸發器何時執行(處理之前或之後)。
保持每個資料庫的觸發器名稱唯一 在MySQL 5中,觸發器名稱必須在每個表中唯一,但不是在每個資料庫中唯一。這表示同一資料庫中的兩個表可具有相同名字的觸發器。這在其他每個資料庫觸發器名稱必須唯一的DBMS中是不被允許的,而且以後的MySQL版本很可能會讓命名規則更為嚴格。因此,現在最好是在資料庫範圍內使用唯一的觸發器名。
觸發器是用 CREATE TRIGGER 語句建立。以下是一個簡單的範例:
輸入:
create trigger newproduct after insert on proucts for each row select 'product added';
分析:CREATE TRIGGER 用來建立一個名為 newproduct 的新觸發器。觸發器可在一個操作發生之前或之後執行,這裡給出了 AFTER INSERT ,所以此觸發器將在 INSERT 語句成功執行後執行。這個觸發器也指定 FOR EACH ROW ,因此程式碼對每個插入行執行。在這個例子中,文字 Product added 將對每個插入的行顯示一次。為了測試這個觸發器,使用 INSERT 語句新增一行或多行到 products
中,你將看到對每個成功的插入,顯示 Product added 訊息。
僅支援表 只有表才支援觸發器,視圖不支援(臨時表也不支援)。
觸發器按每個表每個事件每次地定義,每個表每個事件每次只允許一個觸發器。因此,每個表最多支援6個觸發器(每條 INSERT 、 UPDATE和 DELETE 的之前和之後)。單一觸發器不能與多個事件或多個表關聯,所以,如果你需要一個對 INSERT 和 UPDATE 操作執行的觸發器,則應該定義
兩個觸發器。
觸發器失敗 如果 BEFORE 觸發器失敗,則MySQL將不會執行要求的動作。此外,如果 BEFORE 觸發器或語句本身失敗,MySQL將不會執行 AFTER 觸發器(如果有的話)。
刪除mysql觸發器
現在,刪除觸發器的語法應該很明顯了。為了刪除一個觸發器,可使用 DROP TRIGGER 語句,如下所示:
輸入:
drop trigger newproduct ;
分析:觸發器不能更新或覆寫。為了修改一個觸發器,必須先刪除它,然後再重新建立。
【相關推薦】
1. mysql免費影片教學
#5. MySQL事務-ROLLBACK,COMMIT用法詳解
#以上是mysql觸發器簡介及如何建立和刪除觸發器的詳細內容。更多資訊請關注PHP中文網其他相關文章!