mysql 触发器有几种

来源:站长工具作者:印尼程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《mysql 触发器有几种》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《mysql 触发器有几种》有用,将其分享出去将是对创作者最好的鼓励。

mysql触发器是附着在表上的数据库对象,当表上发生指定事件时,会自动执行预设的SQL逻辑,常用于数据校验、操作审计、关联数据同步等场景。mysql触发器的分类主要基于触发时机和触发事件两个维度。

mysql 触发器有几种

按触发时机分类

触发时机指的是触发器在指定事件执行前还是执行后触发,mysql支持两种触发时机:

1. BEFORE触发器

BEFORE触发器会在触发事件执行之前触发,常用于数据校验、数据预处理场景。比如在插入数据前校验字段是否符合规则,不符合则阻止操作执行。

2. AFTER触发器

AFTER触发器会在触发事件执行之后触发,常用于操作日志记录、关联表数据同步场景。比如插入用户数据后,自动在用户日志表中记录新增操作。

按触发事件分类

触发事件指的是触发触发器执行的表操作类型,mysql支持三种触发事件:

1. INSERT触发器

当对表执行INSERT操作时触发,无论是单条插入还是批量插入,只要发生插入操作就会触发对应的INSERT触发器。

2. UPDATE触发器

当对表执行UPDATE操作时触发,更新单条或多条数据都会触发对应的UPDATE触发器。

3. DELETE触发器

当对表执行DELETE操作时触发,删除单条或多条数据都会触发对应的DELETE触发器。

触发器组合类型

结合触发时机和触发事件,mysql触发器总共有6种组合类型,具体对应关系如下:

触发时机触发事件完整类型
BEFOREINSERTBEFORE INSERT
BEFOREUPDATEBEFORE UPDATE
BEFOREDELETEBEFORE DELETE
AFTERINSERTAFTER INSERT
AFTERUPDATEAFTER UPDATE
AFTERDELETEAFTER DELETE

触发器创建示例

下面给出两种常见触发器的创建示例,帮助理解不同触发器的用法。

BEFORE INSERT触发器示例

创建一个用户表,插入数据前校验用户年龄是否大于18,小于18则阻止插入:

-- 创建用户表
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL
);

-- 创建BEFORE INSERT触发器
DELIMITER //
CREATE TRIGGER before_user_insert
BEFORE INSERT ON user
FOR EACH ROW
BEGIN
    -- 校验年龄是否小于18
    IF NEW.age < 18 THEN
        -- 抛出错误阻止插入
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '用户年龄必须大于等于18';
    END IF;
END //
DELIMITER ;

-- 测试插入,年龄小于18会报错
INSERT INTO user (name, age) VALUES ('张三', 16);

AFTER INSERT触发器示例

创建一个用户操作日志表,用户表插入数据后自动记录新增日志:

-- 创建用户操作日志表
CREATE TABLE user_log (
    log_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    operation VARCHAR(20) NOT NULL,
    create_time DATETIME NOT NULL
);

-- 创建AFTER INSERT触发器
DELIMITER //
CREATE TRIGGER after_user_insert
AFTER INSERT ON user
FOR EACH ROW
BEGIN
    -- 插入操作日志
    INSERT INTO user_log (user_id, operation, create_time)
    VALUES (NEW.id, '新增用户', NOW());
END //
DELIMITER ;

-- 测试插入,会自动生成日志
INSERT INTO user (name, age) VALUES ('李四', 20);
-- 查询日志表会看到对应记录
SELECT * FROM user_log;

触发器使用注意事项

  • 每个表每个事件每个时机只能创建一个触发器,比如user表已经存在BEFORE INSERT触发器,不能再创建同类型的触发器。
  • 触发器内部不能使用返回结果集的语句,比如SELECT语句不能直接返回结果,只能将结果赋值给变量。
  • 触发器执行会占用一定的数据库资源,过多使用触发器可能会影响数据库性能,建议合理评估使用场景。
  • 在触发器中可以使用NEW关键字获取插入或更新后的新数据,使用OLD关键字获取更新或删除前的旧数据,INSERT触发器没有OLD,DELETE触发器没有NEW。

总结:mysql触发器按触发时机分为BEFORE和AFTER两类,按触发事件分为INSERT、UPDATE、DELETE三类,组合起来总共有6种不同的触发器类型,开发者可以根据业务需求选择合适的类型进行创建和使用。

mysql触发器数据库trigger修改时间:2026-07-09 20:12:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。