触发器根据事件类型不同,常分为 INSERT、UPDATE、DELETE 三类。理解这三类触发器的典型用途,是掌握触发器的关键。
INSERT 触发器会在插入记录时触发,可以是 BEFORE INSERT 或 AFTER INSERT。
常见用途:
- 自动补充默认值
- 写入审计日志
- 维护辅助表数据
示例:
DELIMITER //
CREATE TRIGGER before_user_insert
BEFORE INSERT ON user
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
END //
DELIMITER ;这里的 NEW 表示即将插入的新记录。
UPDATE 触发器会在更新记录时触发。
常见用途:
- 自动更新时间
- 记录变更前后数据
- 维护统计值
示例:
DELIMITER //
CREATE TRIGGER after_user_update
AFTER UPDATE ON user
FOR EACH ROW
BEGIN
INSERT INTO user_log(user_id, old_mobile, new_mobile)
VALUES (OLD.id, OLD.mobile, NEW.mobile);
END //
DELIMITER ;这里:
OLD表示更新前的记录NEW表示更新后的记录
DELETE 触发器会在删除记录时触发。
常见用途:
- 记录删除日志
- 归档数据
- 维护关联统计
示例:
DELIMITER //
CREATE TRIGGER before_user_delete
BEFORE DELETE ON user
FOR EACH ROW
BEGIN
INSERT INTO user_deleted_log(user_id, deleted_at)
VALUES (OLD.id, NOW());
END //
DELIMITER ;删除操作中只有 OLD,因为删除后不会有新的记录值。
INSERT 触发器关注“新增时做什么”,UPDATE 触发器关注“修改时做什么”,DELETE 触发器关注“删除时做什么”。触发器能提升自动化程度,但也容易让数据逻辑变得隐蔽,所以应控制复杂度。