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

MySQL 觸發器完整指南:建立、查看與刪除實作教學

     編輯:MySQL 綜合教學

前言

承接《MySQL 學習心得》系列,本篇將深入探討 MySQL 觸發器的核心概念與實作操作。觸發器是一種特殊的預存程序,它不需要透過 CALL 手動呼叫,而是當資料表發生特定事件(INSERT、UPDATE、DELETE)時,由 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
  • tbl_name:永久資料表(不可為臨時表或視圖)
  • trigger_stmt:觸發時執行的 SQL 語句,多行語句需用 BEGIN ... END 包裹

注意事項:同一資料表、相同觸發時間與事件,只能建立一個觸發器。例如無法建立兩個 BEFORE UPDATE 觸發器,但可同時擁有 BEFORE UPDATE 與 AFTER UPDATE。

實作範例:單一與多重語句觸發器

單一語句觸發器

CREATE TABLE account(acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;

此觸發器在資料寫入 account 表前,自動累加新資料的 amount 欄位值。

多重語句觸發器

DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW
BEGIN
  INSERT INTO test2 SET a2 = NEW.a1;
  DELETE FROM test3 WHERE a3 = NEW.a1;
  UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END |
DELIMITER ;

使用 DELIMITER 變更結束符號,避免與程序內部的分號衝突。

查看觸發器資訊

兩種主要方式:

  1. SHOW TRIGGERS; 快速列出所有觸發器摘要
  2. 查詢 information_schema.TRIGGERS 表獲取完整定義:
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = 'ins_sum';

回傳欄位包含 ACTION_STATEMENT(執行語句)、ACTION_TIMING(BEFORE/AFTER)、EVENT_MANIPULATION(INSERT/UPDATE/DELETE)等關鍵資訊。

刪除觸發器

DROP TRIGGER [schema_name.]trigger_name

若省略 schema,預設從目前資料庫移除。範例:DROP TRIGGER `school`.`ins_sum`;

補充:觸發器變數 NEW 與 OLD

  • INSERT:可用 NEW.column 存取新資料
  • UPDATE:OLD.column 為舊值,NEW.column 為新值
  • DELETE:可用 OLD.column 存取被刪除資料

總結

觸發器是實現資料完整性、審計日誌、跨表同步等業務邏輯的利器。善用 BEFORE 可攔截異常資料,AFTER 適合後續處理。記住:同一表、同一事件、同一時機只能有一個觸發器,設計時請統籌規劃。

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