場景:主表異動自動同步到歷史表
test:主表(id, name, type, create_time)
test_hisy:歷史表(同結構 + operation 欄位)
建表語句
觸發器 2:BEFORE UPDATE — 修改前記錄舊值
DELIMITER //
DROP TRIGGER IF EXISTS trg_test_before_update//
CREATE TRIGGER trg_test_before_update
BEFORE UPDATE ON `test`
FOR EACH ROW
BEGIN
IF NEW.type = '2' THEN
INSERT INTO `test_hisy` (`name`, `type`, `create_time`, `operation`)
VALUES (OLD.`name`, OLD.`type`, OLD.`create_time`, 'update');
END IF;
END//
DELIMITER ;
觸發器 3:BEFORE DELETE — 刪除前歸檔
DELIMITER //
DROP TRIGGER IF EXISTS trg_test_before_delete//
CREATE TRIGGER trg_test_before_delete
BEFORE DELETE ON `test`
FOR EACH ROW
BEGIN
INSERT INTO `test_hisy` (`name`, `type`, `create_time`, `operation`)
VALUES (OLD.`name`, OLD.`type`, OLD.`create_time`, 'delete');
END//
DELIMITER ;
關鍵點速查
| 事件 | 可用欄位 | 典型用途 | 能否修改 NEW |
| BEFORE INSERT | NEW | 資料清洗、補預設值、驗證 | ✅ 是 |
| AFTER INSERT | NEW | 同步、日誌、衍生表維護 | ❌ 否 |
| BEFORE UPDATE | OLD, NEW | 比對變化、記錄舊值、阻止非法改 | ✅ 是 |
| AFTER UPDATE | OLD, NEW | 同步、審計、觸發下游 | ❌ 否 |
| BEFORE DELETE | OLD | 歸檔、檢查關聯、軟刪除標記 | ❌ 否 |
| AFTER DELETE | OLD | 清理關聯、統計更新 | ❌ 否 |
驗證測試