news 2026/5/12 11:06:50

触发器(Trigger) 是数据库中一种特殊的存储程序,它会在指定的表上发生特定事件(如 INSERT、UPDATE、DELETE)时自动执行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
触发器(Trigger) 是数据库中一种特殊的存储程序,它会在指定的表上发生特定事件(如 INSERT、UPDATE、DELETE)时自动执行

触发器是数据库中自动执行的存储程序,当关联表发生INSERT、UPDATE或DELETE操作时触发。


本文介绍了触发器的核心特点(自动触发、事件驱动)、语法结构(CREATE TRIGGER语句)以及BEFORE/AFTER两种触发时机的应用场景。


通过一个审计日志示例(在employees_test表插入数据后自动记录到audit表),演示了AFTER INSERT触发器的实现方法,包括使用NEW伪记录获取新数据。


文章还列举了触发器的常见应用场景(数据验证、同步、汇总等)及使用注意事项(性能影响、调试难度等)。


触发器(Trigger)


触发器是数据库中一种特殊的存储程序,它会在指定的表上发生特定事件(如INSERTUPDATEDELETE)时自动执行


核心特点

特点说明
自动触发不需要手动调用,满足条件时自动执行
绑定表必须关联到某个具体的数据表
事件驱动INSERTUPDATEDELETE操作触发
时机可选可在事件之前(BEFORE)之后(AFTER)执行

语法结构

sql

CREATE TRIGGER 触发器名称 {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON 表名 FOR EACH ROW BEGIN -- 要执行的SQL语句 END;

触发时机说明

时机说明常见用途
BEFORE在数据修改之前执行数据验证、数据清洗、默认值填充
AFTER在数据修改之后执行日志记录、数据同步、审计追踪

可访问的伪记录

在触发器内部可以访问特殊的伪记录:

伪记录说明可用操作
NEW操作后的新数据INSERTUPDATE
OLD操作前的旧数据UPDATEDELETE

简单示例

sql

-- 创建触发器:在插入员工后自动记录审计日志 CREATE TRIGGER audit_log AFTER INSERT ON employees_test FOR EACH ROW INSERT INTO audit (EMP_no, NAME) VALUES (NEW.ID, NEW.NAME);

执行过程:

  1. 用户执行INSERT INTO employees_test ...

  2. 数据插入成功后,触发器自动audit表插入记录

  3. 用户无需单独操作audit

常见应用场景

  • 📝审计日志:记录谁在什么时间修改了什么数据

  • 🔒数据验证:在插入/更新前检查数据合法性

  • 🔄数据同步:主表变化时自动更新关联表

  • 📊数据汇总:增删改时自动更新统计表

  • 🔗级联操作:删除主表记录时自动删除子表关联记录

优点与注意事项

优点

  • 自动化业务逻辑,减少应用程序代码

  • 保证数据一致性和完整性

  • 强制实施数据规则

注意事项

  • 过度使用会影响性能

  • 调试相对困难(自动执行,不易追踪)

  • 嵌套触发器可能导致复杂度爆炸

  • 某些在线评测系统可能限制触发器语法


触发器和存储过程对比

对比维度触发器 (Trigger)存储过程 (Stored Procedure)
调用方式自动触发(由DML事件触发)手动调用(使用CALL命令)
参数不支持参数支持输入、输出参数
返回值不返回值可返回值或结果集
事务处理与触发事务绑定可独立控制
主要场景审计、数据验证、级联更新复杂业务逻辑封装
调试难度较难调试相对容易调试
性能影响隐式执行,难以控制显式调用,可优化

触发器在 MySQL 和 Oracle 中的异同

对比维度MySQL 触发器Oracle 触发器
语法结构FOR EACH ROW必须,不支持FOR EACH STATEMENT支持FOR EACH ROWFOR EACH STATEMENT
触发时机BEFORE/AFTERBEFORE/AFTER/INSTEAD OF(视图)
触发器内事务不能包含事务语句(COMMIT/ROLLBACK)可以包含事务语句(需谨慎使用)
错误处理使用SIGNAL/RESIGNAL使用RAISE_APPLICATION_ERROR
新旧数据访问NEW/OLD(不加冒号):NEW/:OLD(需加冒号)
行级限制每个表每个事件最多6个触发器无明确数量限制
存储过程调用可调用可调用

触发器示例


题目描述

构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。

CREATE TABLE employees_test( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); CREATE TABLE audit( EMP_no INT NOT NULL, NAME TEXT NOT NULL );

后台会往employees_test插入一条数据:

INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );

然后从audit里面使用查询语句:

select * from audit;

按照题目要求,构造一个INSERT触发器audit_log,实现在employees_test插入数据后,把对应的IDNAME写入audit表中。


sql

DROP TRIGGER IF EXISTS audit_log; DELIMITER $$ CREATE TRIGGER audit_log AFTER INSERT ON employees_test FOR EACH ROW BEGIN INSERT INTO audit (EMP_no, NAME) VALUES (NEW.ID, NEW.NAME); END $$ DELIMITER ;

说明:

  1. 触发器名称audit_log

  2. 触发时间AFTER INSERT— 在插入操作完成后触发

  3. 触发事件:在employees_test表上执行INSERT时触发

  4. 操作:使用NEW.IDNEW.NAME获取刚刚插入的新数据,并插入到audit表中

  5. 字段对应

    • audit.EMP_noemployees_test.ID

    • audit.NAMEemployees_test.NAME

测试过程:

sql

-- 清空数据(方便重复测试) DELETE FROM audit; DELETE FROM employees_test; -- 插入员工数据 INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00); -- 查询 audit 表 SELECT * FROM audit;

输出结果:

text

1|Paul
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 11:03:53

SkillPilot:AI编程助手技能一键管理与安全部署实战

1. 项目概述与核心价值最近在折腾AI编程助手的时候,发现了一个挺有意思的痛点:虽然Claude Code、Cursor这些工具都支持通过SKILL.md文件来扩展功能,但每次想找个新技能,都得手动去GitHub上翻找、下载、配置,还得担心代…

作者头像 李华
网站建设 2026/5/12 11:02:47

以下是对 `RegisterTypes` 方法的详细、系统性讲解

以下是对 RegisterTypes 方法的详细、系统性讲解,结合代码进行说明。一、Prism RegisterTypes(IContainerRegistry containerRegistry) 方法详解 RegisterTypes 是 Prism 启动时最核心的依赖注册方法,用于告诉容器(Unity)&#xf…

作者头像 李华
网站建设 2026/5/12 11:01:32

AI代理安全实战:ClawMoat防火墙部署与威胁防护指南

1. 项目概述:为什么你的AI代理需要一个“护城河”?如果你正在用LangChain、CrewAI或者AutoGen这类框架构建AI代理应用,那你一定体验过那种“既强大又心慌”的感觉。这些代理能执行Shell命令、读写文件、浏览网页、发送邮件,能力堪…

作者头像 李华
网站建设 2026/5/12 11:00:40

为AI智能体项目OpenClaw配置Taotoken作为模型供应商

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为AI智能体项目OpenClaw配置Taotoken作为模型供应商 在构建基于OpenClaw框架的AI智能体时,模型供应商的选择和配置是项…

作者头像 李华