1. 触发器基础概念解析
数据库触发器(Trigger)是一种特殊的存储过程,它会在特定数据库事件发生时自动执行。与普通存储过程不同,触发器没有显式调用接口,而是由数据库引擎在满足预设条件时自动触发执行。
1.1 触发器的核心特性
触发器具有三个关键特性:
- 事件驱动:与特定表事件(INSERT/UPDATE/DELETE)绑定
- 自动执行:满足条件时由DBMS自动调用
- 事务关联:作为触发语句所在事务的一部分执行
在实际项目中,我们常用触发器实现:
- 数据完整性约束(跨表校验)
- 审计日志自动记录
- 业务规则自动化执行
- 数据同步与派生计算
重要提示:触发器执行对用户透明,过度使用可能导致系统行为难以追踪,建议在文档中明确记录所有触发器定义。
1.2 触发器类型对比
根据触发时机不同,主要分为两类触发器:
| 类型 | 触发时机 | 典型应用场景 | 访问数据特性 |
|---|---|---|---|
| BEFORE | 语句执行前触发 | 数据校验、默认值填充 | 可修改新数据 |
| AFTER | 语句执行后触发 | 审计日志、数据同步 | 只读访问数据 |
以MySQL为例,还支持INSTEAD OF触发器(视图触发器),但并非所有DBMS都支持这一特性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 触发器语法深度解析
2.1 标准创建语法
sql复制CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
[WHEN (condition)]
BEGIN
-- 触发器逻辑
END;
关键参数说明:
FOR EACH ROW:行级触发器(默认语句级)WHEN:附加触发条件- 在Oracle中需使用
:前缀访问新旧数据(:NEW/:OLD) - SQL Server使用
INSERTED/DELETED逻辑表
2.2 多事件触发器示例
sql复制-- PostgreSQL多事件触发器
CREATE TRIGGER
