2015年10月19日 星期一
2015年10月8日 星期四
Trigger
Mysql 的 Trigger 觸發
trigger_name 觸發名稱
隨個人喜好命名
trigger_time 觸發時間
只有 BEFORE 和AFTER兩種
BEFORE 是在進行trigger_event 之前
AFTER 在進行trigger_event 之後觸發
trigger_event 觸發事件
有 INSERT、DELETE、UPDATE 三種
以下有幾個注意點:
1. INSERT INTO .. ON DUPLICATE UPDATE
這語法造成的觸發行為由最後是 INSERT 或是 UPDATE 來決定
2. 同一個 trigger_time +trigger_event 組合不得重覆。
3. INSERT、LOAD DATA和REPLACE 都會觸發 INSERT event
2. 同一個 trigger_time +trigger_event 組合不得重覆。
3. INSERT、LOAD DATA和REPLACE 都會觸發 INSERT event
DELETE和REPLACE 都會觸發 DELETE。
trigger_stmt 是當觸發時要執行的語句。
如果您打算執行多個語句,可使用BEGIN ... END復合語句結構。
以下是範例(直接在Mysql console下指令,不要phpMyAdmin下操作):
| DROP PROCEDURE IF EXISTS update_testTable ; delimiter // CREATE PROCEDURE update_testTable ( IN id varchar(32)) BEGIN DELETE c FROM a WHERE a.id = id ; INSERT INTO a ( id ) value ( id ) ; END // delimiter ; delimiter // DROP TRIGGER IF EXISTS trigger_INSERT_testTable ; CREATE TRIGGER trigger_INSERT_testTable AFTER INSERT ON testTable FOR EACH ROW BEGIN CALL update_testTable (NEW.id) END // delimiter ; delimiter // DROP TRIGGER IF EXISTS trigger_UPDATE_testTable ; CREATE TRIGGER trigger_UPDATE_testTable AFTER INSERT ON testTable FOR EACH ROW BEGIN CALL update_testTable (NEW.id) END // delimiter ; delimiter // DROP TRIGGER IF EXISTS trigger_DELETE_testTable ; CREATE TRIGGER trigger_DELETE_testTable AFTER INSERT ON testTable FOR EACH ROW BEGIN CALL update_testTable (OLD.id) END // delimiter ; delimiter // |
查看trigger 內容 mysql> show triggers; 刪除trigger mysql> drop TRIGGER trigger_name;
訂閱:
文章 (Atom)