首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 觸發器建立與刪除語法詳解:命名規範、BEFORE/AFTER、OLD/NEW 使用

     編輯:MySQL 綜合教學

建立觸發器語法

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW
BEGIN
    trigger_stmt
END;

參數詳解

子句說明可選值
trigger_name觸發器名稱,建議規範:t_動作_表_時機_事件,如 t_upd_user_bfr_upd唯一識別字串
trigger_time觸發時機BEFORE / AFTER
trigger_event觸發事件INSERT / UPDATE / DELETE
tbl_name關聯永久表(不可為 TEMPORARY 表或視圖)表名
FOR EACH ROW行級觸發(MySQL 僅支援行級)固定
trigger_stmt執行語句,可用 BEGIN ... END 包含多句SQL 語句

OLD / NEW 列引用規則

  • INSERT:僅 NEW 合法(新行資料)。
  • DELETE:僅 OLD 合法(舊行資料)。
  • UPDATE:OLD(更新前)、NEW(更新後)皆可用。
  • 引用方式:NEW.column_name、OLD.column_name。

刪除觸發器

DROP TRIGGER [schema_name.]trigger_name;

權限與限制

  • 需 TRIGGER 權限(MySQL 5.1+ 需 SUPER,5.7+ 獨立 TRIGGER 權限)。
  • 同一表、同一時機、同一事件只能有一個觸發器(如不能有兩個 BEFORE UPDATE)。
  • INSERT ... ON DUPLICATE KEY UPDATE 會依序觸發 BEFORE INSERT、AFTER INSERT 或 BEFORE UPDATE/AFTER UPDATE。

快速範例

DELIMITER //
CREATE TRIGGER t_ins_user_bfr_ins
BEFORE INSERT ON `user`
FOR EACH ROW
BEGIN
    INSERT INTO user_log (user_id, action) VALUES (NEW.id, 'INSERT');
END//
DELIMITER ;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved