什么是触发器_mysql触发器基本原理

8次阅读

触发器是 MySQL 中事件驱动的自动执行机制,当对指定表执行 INSERT、UPDATE 或 DELETE 操作时,按行触发 BEFORE 或 AFTER 定义的 SQL 逻辑,通过 NEW/OLD 访问数据,用于校验、同步、日志等场景。

什么是触发器_mysql 触发器基本原理

触发器是 MySQL 中一种与表紧密绑定的自动执行机制,它不是手动调用的存储过程,而是在对某张表执行 INSERT、UPDATE 或 DELETE 操作时,由数据库系统自动触发并运行的一段 SQL 逻辑。

触发器的核心原理

它的本质是“事件驱动”:当指定表上发生特定 DML 操作(增、删、改)时,MySQL 会立即检查是否存在匹配的触发器。如果存在,且满足触发时间(BEFORE 或 AFTER)、操作类型和作用表等条件,就自动执行其定义的 SQL 语句块。

触发器按行生效(行级触发),即每影响一行数据,就触发一次。内部可通过 NEW(代表新值,INSERT/UPDATE 可用)和 OLD(代表旧值,UPDATE/DELETE 可用)关键字访问当前被操作行的字段内容。

触发器的四个必要要素

  • 监视表 :必须是永久基表,不能是临时表或视图
  • 触发事件 :仅支持 INSERT、UPDATE、DELETE(含 LOAD DATA、REPLACE 等隐式触发场景)
  • 触发时机 :BEFORE(操作前校验 / 修改)或 AFTER(操作后联动 / 记录)
  • 触发动作 :一段合法 SQL,可单条,也可用 BEGIN……END 包裹多条(需提前设置 delimiter)

典型应用场景

  • 数据变更前做合法性检查(如金额不能为负)
  • 主表更新后自动同步更新关联表(如订单完成 → 库存扣减)
  • 记录操作日志(把 OLD/NEW 写入审计表)
  • 实现级联逻辑(如删除用户时清空其评论)
  • 自动生成计算字段或默认值(如创建时间、更新时间戳)

简单示例说明

比如在 orders 表插入新订单后,自动减少 product 表对应商品的库存:

CREATE TRIGGER update_stock_after_order
  AFTER INSERT ON orders
  FOR EACH ROW
  BEGIN
    UPDATE product SET num = num – NEW.quantity WHERE pid = NEW.pid;
  END;

这里 NEW.quantity 和 NEW.pid 就是刚插入那行订单里的字段值,MySQL 自动提供,无需额外查询。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-28发表,共计946字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources