觸發器基本概念
- MySQL 5.0.2+ 支援。
- 關聯永久表(不支援臨時表、視圖)。
- 觸發時機:
BEFORE(約束檢查前) / AFTER(約束檢查後)。
- 觸發事件:
INSERT、UPDATE、DELETE。
- 每張表每種時機+事件僅能建一個觸發器(共 6 種組合)。
建立語法
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON tbl_name FOR EACH ROW
BEGIN
-- 觸發器主體
END;
實戰範例:同步記錄至日誌表
DELIMITER $$
CREATE TRIGGER trg_film_after_insert
AFTER INSERT ON film FOR EACH ROW
BEGIN
INSERT INTO film_text (film_id, title, description)
VALUES (NEW.film_id, NEW.title, NEW.description);
END $$
DELIMITER ;
-- 測試
INSERT INTO film (film_id, title) VALUES (10, 'www.111cn.net');
SELECT * FROM film_text WHERE film_id = 10;
-- 成功同步
NEW / OLD 伪行
| 事件 | NEW | OLD |
| INSERT | 新行(可修改,BEFORE 時) | 不可用 |
| UPDATE | 新值(可修改,BEFORE 時) | 舊值(唯讀) |
| DELETE | 不可用 | 舊值(唯讀) |
管理指令
SHOW TRIGGERS;
DROP TRIGGER [IF EXISTS] trigger_name;
注意事項
- 觸發器內不可呼叫
COMMIT/ROLLBACK(除非自主交易),不可使用 LOCK TABLES。
- BEFORE 觸發器中修改
NEW 可實現資料清洗/驗證。
- 大量批次操作時觸發器逐行執行,效能影響大,權衡使用。