1. MySQL触发器基础概念解析
第一次接触MySQL触发器是在2013年处理一个电商库存系统时,当时需要实时更新商品库存状态。触发器(Trigger)这个数据库对象完美解决了我的需求——它能在指定表发生数据变更时自动执行预定义的SQL语句。
触发器本质上是一种特殊的存储过程,它与表紧密关联,会在特定事件(INSERT/UPDATE/DELETE)发生时自动触发执行。与普通存储过程不同,触发器没有直接调用的接口,它的执行完全由数据库事件驱动。
1.1 触发器的核心组成要素
每个触发器包含三个关键组成部分:
-
触发时机(BEFORE/AFTER):决定触发器在事件发生前还是发生后执行。BEFORE触发器常用于数据验证和预处理,AFTER触发器则适合用于级联更新和审计日志。
-
触发事件(INSERT/UPDATE/DELETE):定义哪些数据操作会激活触发器。一个触发器可以响应单个或多个事件(MySQL 5.7+支持多事件触发器)。
-
触发主体(BEGIN...END块):包含触发器被激活时要执行的SQL语句。这里可以使用所有合法的SQL语法,包括流程控制语句。
sql复制-- 典型触发器结构示例
CREATE TRIGGER trigger_name
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON table_name
FOR EACH ROW
BEGIN
-- 触发器逻辑
END;
1.2 触发器执行上下文与OLD/NEW对象
在触发器内部,可以通过特殊的OLD和NEW伪记录访问被操作的数据:
- INSERT操作:只有NEW对象有效,包含要插入的新数据
- UPDATE操作:OLD包含修改前的数据,NEW包含修改后的数据
- DELETE操作:只有OLD对象有效,包含被删除的数据
重要提示:BEFORE触发器中可以修改NEW对象的值,这在数据预处理时非常有用。但AFTER触发器中NEW是只读的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 触发器的典型应用场景实战
2.1 数据完整性维护
在银行系统中,我使用触发器确保账户余额不会出现负数。当有取款操作时,BEFORE UPDATE触发器会检查新余额:
sql复制
