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

MySQL 觸發器創建完整語法指南:BEFORE/AFTER、INSERT/UPDATE/DELETE、OLD/NEW 伪表實戰

     編輯:MySQL 資料庫相關知識

語法結構

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

核心要素詳解

元素說明
trigger_timeBEFORE / AFTER:語句執行前/後觸發
trigger_eventINSERT(含 LOAD DATA/REPLACE)、UPDATE、DELETE(含 REPLACE)
tbl_name必須為永久表,不能關聯 TEMPORARY 表或視圖
FOR EACH ROW行級觸發(MySQL 僅支援行級)
trigger_stmt觸發執行的 SQL;多語句用 BEGIN ... END 複合語句

OLD / NEW 伪表列引用

  • OLD.col_name:更新/刪除前的舊值。
  • NEW.col_name:插入的新值或更新後的新值。

權限要求:引用 OLD/NEW 需 SELECT 權限;SET NEW.col = ... 需 UPDATE 權限。

限制與注意事項

  • 同一表、同一時間、同一事件不能有兩個觸發器(如兩個 BEFORE UPDATE)。但可共存 BEFORE UPDATE + AFTER UPDATE 或 BEFORE INSERT + BEFORE UPDATE。
  • INSERT ... ON DUPLICATE KEY UPDATE 會依次觸發 BEFORE INSERT、AFTER INSERT 或 BEFORE UPDATE/AFTER UPDATE(視是否有重複鍵)。
  • 觸發器不會被級聯外鍵動作激活(未來版本可能放寬)。
  • 創建需 SUPER 權限。

實戰範例:部落格分類計數自動維護

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。

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