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