1. MySQL触发器基础概念解析
第一次接触MySQL触发器的开发者常常会疑惑:这个看似神秘的数据库对象到底能做什么?简单来说,触发器就像是数据库的"自动应答机"——当特定事件发生时,它会自动执行预定义的操作。我在实际项目中曾用触发器解决过一个典型问题:电商订单状态变更时自动发送通知邮件,省去了大量手动编码工作。
触发器本质上是一种与表事件绑定的存储过程,由INSERT、UPDATE或DELETE语句触发执行。与普通存储过程不同,触发器的执行完全由数据库引擎控制,不需要显式调用。这种特性使其特别适合处理数据一致性维护、审计日志记录等场景。
关键理解:触发器在事务中执行,这意味着如果主操作失败回滚,触发器中的操作也会被撤销,这保证了数据操作的原子性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 触发器核心结构与创建语法
2.1 触发器的基本组成要素
一个完整的触发器包含三大核心要素:
- 触发时机(BEFORE/AFTER):决定是在主操作执行前还是执行后触发
- 触发事件(INSERT/UPDATE/DELETE):定义何种数据操作会激活触发器
- 触发粒度(FOR EACH ROW):MySQL目前只支持行级触发器
创建触发器的标准语法如下:
sql复制CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name FOR EACH ROW
trigger_body
2.2 新旧数据引用技巧
在触发器体内,我们可以通过特殊变量访问被操作的数据:
NEW:引用将要插入或更新后的行数据OLD:引用更新前或删除前的行数据
例如,创建一个在订单表更新时记录变更历史的触发器:
sql复制CREATE TRIGGER log_order_changes
AFTER UPDATE ON orders
FOR EACH ROW
BEGIN
INSERT INTO order_audit_log
SET order_id = OLD.id,
old_status = OLD.status,
new_status = NEW.status,
