語法結構
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_stmt
trigger_time:BEFORE / AFTER
trigger_event:INSERT / UPDATE / DELETE
FOR EACH ROW:逐列觸發(MySQL 僅支援行級)。
trigger_stmt:單句或 BEGIN ... END 多句塊。
NEW / OLD 別名
| 別名 | 適用事件 | 含義 |
| NEW.col | INSERT, UPDATE | 新值(INSERT 為插入值,UPDATE 為更新後值) |
| OLD.col | UPDATE, DELETE | 舊值(更新前/刪除前值) |
需對引用欄位擁有 SELECT 權限,對 SET NEW.col = ... 需 UPDATE 權限。
限制與注意
- 同一表、同一時間、同一事件只能建立一個觸發器(如不能有兩個
BEFORE UPDATE)。
- 不支援外鍵級聯動作觸發(MySQL 8.0 仍限制)。
- 需
SUPER / TRIGGER 權限。
INSERT ... ON DUPLICATE KEY UPDATE 會依序觸發 BEFORE INSERT、AFTER INSERT、BEFORE UPDATE、AFTER UPDATE。
實例:部落格分類文章數自動遞增
CREATE TRIGGER update_blogs
AFTER INSERT ON blogs
FOR EACH ROW
UPDATE blogcategory
SET amount = amount + 1
WHERE cid = NEW.categoryid;
效果:每插入一篇部落格,對應分類 amount 自動 +1。
查看與刪除
SHOW TRIGGERS\G
DROP TRIGGER update_blogs;
- 上一篇文章: MySQL 多表操作與批次處理完整教學:關聯查詢、修改、備份、SQL 腳本執行
- 下一篇文章: 實用 SQL 技巧集錦:複製表、拷貝資料、外連接、排程提醒、刪除主表孤兒資料
Copyright ©
程式碼之家 All Rights Reserved