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

MySQL 觸發器入門實戰:自動維護字符統計表

     編輯:MySQL 資料庫相關知識

觸發器概念

**定義:** 針對特定表的特定事件(INSERT/UPDATE/DELETE),自動執行的 SQL 程式碼塊。
**版本:** MySQL 5.0+ 引入,5.x 系列持續完善。

實戰案例:插入姓名自動累加字符數

建立表結構

CREATE TABLE data (name VARCHAR(255));
CREATE TABLE chars (count INT(10));
INSERT INTO chars (count) VALUES (0);

建立觸發器

CREATE TRIGGER t1
AFTER INSERT ON data
FOR EACH ROW
UPDATE chars SET count = count + CHAR_LENGTH(NEW.name);

關鍵子句解析

  • AFTER INSERT:事件觸發時機(還有 BEFORE INSERT、AFTER UPDATE 等)。
  • FOR EACH ROW:行級觸發,每插入一行執行一次。
  • NEW.name:引用**新插入行**的 name 欄位值。對應 OLD 可用於 UPDATE/DELETE 獲取舊值。

驗證觸發器

SHOW TRIGGERS\G
-- 輸出包含:Trigger: t1, Event: INSERT, Table: data, Timing: AFTER, Statement: UPDATE ...

測試效果

INSERT INTO data (name) VALUES ('Alice');  -- 5 字符
INSERT INTO data (name) VALUES ('Bob');     -- 3 字符
SELECT * FROM chars;  -- count = 8

觸發器管理

  • 查看:SHOW TRIGGERS [FROM db_name] [LIKE 'pattern']
  • 刪除:DROP TRIGGER [IF EXISTS] [db_name.]trigger_name
  • 權限:需 TRIGGER 權限(MySQL 5.1.6+),超級權限自動擁有。

應用場景

  1. 審計日誌: 記錄關鍵表變更前後值、操作用戶、時間。
  2. 衍生資料維護: 統計計數、匯總表、冗餘欄位同步。
  3. 業務規則強制: 複雜約束(跨表檢查)在 BEFORE 觸發器中攔截非法操作。
  4. 資料同步/複製: 異構系統增量同步觸發點。

效能與限制提醒

  • 觸發器在**同一事務**內執行,若觸發器失敗會導致原語句回滾。
  • 避免觸發器中執行耗時操作(發送郵件、HTTP 請求),改用消息隊列異步處理。
  • MySQL 不支援語句級觸發器(FOR EACH STATEMENT),僅行級。
  • 遞歸觸發(觸發器修改同表再觸發)會報錯,需邏輯避免。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved