MySQL | 觸發器
- 什麼是觸發器
- 觸發器的優缺點
-
- 觸發器的優點:
- 觸發器的缺點:
- 建立觸發器
-
- 文法格式:
- 文法說明如下。
-
- 1) 觸發器名
- 2) INSERT | UPDATE | DELETE
- 4) 表名
- 5) 觸發器主體
- 6) FOR EACH ROW
什麼是觸發器
觸發器是嵌入到 MySQL 中的一段程式,在滿足定義條件時觸發,并執行觸發器中定義的語句集合。在MySQL中主要用于保護表中的資料。特别是當有多個表具有一定的互相聯系的時候,觸發器能夠讓不同的表保持資料的一緻性。
在 MySQL 中,隻有執行 INSERT、UPDATE 和 DELETE 操作時才能激活觸發器,其它 SQL 語句則不會激活觸發器。
觸發器的執行是自動的,當對觸發器相關表的資料做出相應的修改後立即執行。
觸發器可以實施比 FOREIGN KEY 限制、CHECK 限制更為複雜的檢查和操作。
觸發器可以實作表資料的級聯更改,在一定程度上保證了資料的完整性。
1.使用觸發器實作的業務邏輯在出現問題時很難進行定位,特别是涉及到多個觸發器的情況下,會使後期維護變得困難。
2.大量使用觸發器容易導緻代碼結構被打亂,增加了程式的複雜性,如果需要變動的資料量較大時,觸發器的執行效率會非常低。
CREATE <觸發器名> < BEFORE | AFTER >
<INSERT | UPDATE | DELETE >
ON <表名> FOR EACH Row<觸發器主體>
觸發器的名稱,觸發器在目前資料庫中必須具有唯一的名稱。如果要在某個特定資料庫中建立,名稱前面應該加上資料庫的名稱。
觸發事件,用于指定激活觸發器的語句的種類。
注意:三種觸發器的執行時間如下。
INSERT:将新行插入表時激活觸發器。例如,INSERT 的 BEFORE 觸發器不僅能被 MySQL 的 INSERT 語句激活,也能被 LOAD DATA 語句激活。
DELETE: 從表中删除某一行資料時激活觸發器,例如 DELETE 和 REPLACE 語句。
UPDATE:更改表中某一行資料時激活觸發器,例如 UPDATE 語句。
3) BEFORE | AFTER
BEFORE 和 AFTER,觸發器被觸發的時刻,表示觸發器是在激活它的語句之前或之後觸發。若希望驗證新資料是否滿足條件,則使用 BEFORE 選項;若希望在激活觸發器的語句執行之後完成幾個或更多的改變,則通常使用 AFTER 選項。
與觸發器相關聯的表名,此表必須是永久性表,不能将觸發器與臨時表或視圖關聯起來。在該表上觸發事件發生時才會激活觸發器。同一個表不能擁有兩個具有相同觸發時刻和事件的觸發器。例如,對于一張資料表,不能同時有兩個 BEFORE UPDATE 觸發器,但可以有一個 BEFORE UPDATE 觸發器和一個 BEFORE INSERT 觸發器,或一個 BEFORE UPDATE 觸發器和一個 AFTER UPDATE 觸發器。