Skip to content

Latest commit

 

History

History
94 lines (63 loc) · 1.72 KB

File metadata and controls

94 lines (63 loc) · 1.72 KB

使用触发器

触发器根据事件类型不同,常分为 INSERTUPDATEDELETE 三类。理解这三类触发器的典型用途,是掌握触发器的关键。

INSERT触发器

INSERT 触发器会在插入记录时触发,可以是 BEFORE INSERTAFTER INSERT

常见用途:

  • 自动补充默认值
  • 写入审计日志
  • 维护辅助表数据

示例:

DELIMITER //

CREATE TRIGGER before_user_insert
BEFORE INSERT ON user
FOR EACH ROW
BEGIN
  SET NEW.created_at = NOW();
END //

DELIMITER ;

这里的 NEW 表示即将插入的新记录。

UPDATE触发器

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触发器

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 触发器关注“删除时做什么”。触发器能提升自动化程度,但也容易让数据逻辑变得隐蔽,所以应控制复杂度。