完整語法
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
子句詳細說明
| 子句 | 說明 |
trigger_name | 觸發器名稱,Schema 內唯一。建議:t_動作_表_時機_事件 |
trigger_time | BEFORE:語句執行前;AFTER:語句執行後 |
trigger_event | INSERT:INSERT/LOAD DATA/REPLACE 觸發
UPDATE:UPDATE 觸發
DELETE:DELETE/REPLACE 觸發 |
tbl_name | 永久表(不可 TEMPORARY 表、視圖) |
FOR EACH ROW | 行級觸發(MySQL 僅支援行級) |
trigger_stmt | 執行語句,多句用 BEGIN ... END 包裹 |
重要行為細節
INSERT ... ON DUPLICATE KEY UPDATE:依重鍵情況依序觸發 BEFORE INSERT、AFTER INSERT 或 BEFORE UPDATE/AFTER UPDATE。
REPLACE 實為 DELETE + INSERT,會觸發對應的 DELETE/INSERT 觸發器。
- 同一表、同一
trigger_time、同一 trigger_event 只能有一個觸發器(如不能有兩個 BEFORE UPDATE)。
trigger_stmt 內可使用存儲程序允許的大多數語句,但不可含 START TRANSACTION/COMMIT/ROLLBACK(觸發器隱含在觸發語句的交易中)。
權限需求
- MySQL 5.1-5.6:需
SUPER 權限。
- MySQL 5.7+:獨立
TRIGGER 權限。
刪除觸發器
DROP TRIGGER [schema_name.]trigger_name;
查看觸發器
SHOW TRIGGERS;
SHOW CREATE TRIGGER trigger_name;