萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 觸發器建立、觸發時機與實戰範例

觸發器基本概念

  • MySQL 5.0.2+ 支援。
  • 關聯永久表(不支援臨時表、視圖)。
  • 觸發時機:BEFORE(約束檢查前) / AFTER(約束檢查後)。
  • 觸發事件:INSERT、UPDATE、DELETE。
  • 每張表每種時機+事件僅能建一個觸發器(共 6 種組合)。

建立語法

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON tbl_name FOR EACH ROW
BEGIN
    -- 觸發器主體
END;

實戰範例:同步記錄至日誌表

DELIMITER $$
CREATE TRIGGER trg_film_after_insert
AFTER INSERT ON film FOR EACH ROW
BEGIN
    INSERT INTO film_text (film_id, title, description)
    VALUES (NEW.film_id, NEW.title, NEW.description);
END $$
DELIMITER ;

-- 測試
INSERT INTO film (film_id, title) VALUES (10, 'www.111cn.net');
SELECT * FROM film_text WHERE film_id = 10;
-- 成功同步

NEW / OLD 伪行

事件NEWOLD
INSERT新行(可修改,BEFORE 時)不可用
UPDATE新值(可修改,BEFORE 時)舊值(唯讀)
DELETE不可用舊值(唯讀)

管理指令

SHOW TRIGGERS;
DROP TRIGGER [IF EXISTS] trigger_name;

注意事項

  • 觸發器內不可呼叫 COMMIT/ROLLBACK(除非自主交易),不可使用 LOCK TABLES。
  • BEFORE 觸發器中修改 NEW 可實現資料清洗/驗證。
  • 大量批次操作時觸發器逐行執行,效能影響大,權衡使用。
copyright © 萬盛學電腦網 all rights reserved