首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL觸發器創建語法詳解與實戰示例

     編輯:MySQL 資料庫相關知識

語法結構

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 — 注意:INSERT觸發器也會被LOAD DATA/REPLACE激活;DELETE觸發器也響應REPLACE
  • tbl_name:必須是永久表,不能關聯臨時表/視圖
  • FOR EACH ROW:行級觸發,MySQL僅支持行級
  • trigger_stmt:單句或BEGIN ... END塊,可用存儲過程允許的語句

權限與限制

  • 需SUPER權限創建
  • 同一表同一時間+同一事件只能有一個觸發器(如不能有兩個BEFORE UPDATE)
  • 引用OLD.col需SELECT權限,賦值NEW.col需UPDATE權限
  • 目前不支持級聯外鍵動作激活(未來會放開)

NEW/OLD別名對照

操作OLD.colNEW.col
INSERT無新行值
UPDATE舊值新值
DELETE舊值無

實戰示例:文章發布自動更新分類計數

CREATE TRIGGER update_blogs 
AFTER INSERT ON blogs 
FOR EACH ROW 
UPDATE blogcategory 
SET amount = amount + 1 
WHERE cid = NEW.categoryid;

含義:blogs表發生INSERT/LOAD DATA/REPLACE時,自動將對應分類amount加1。NEW.categoryid引用新插入行的分類ID。

易混淆場景

INSERT ... ON DUPLICATE KEY UPDATE會依次激活:BEFORE INSERT → AFTER INSERT → (若有重複鍵)BEFORE UPDATE → AFTER UPDATE。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved