MySQL学习笔记集--触发器

触发器

MySQL触发器(Trigger)是一种特殊的存储过程,它在指定的数据库表上指定的事件(INSERT、UPDATE、DELETE)之前或之后自动执行。触发器可以用来强制执行复杂的业务逻辑、数据完整性规则、自动更新数据等。

触发器的类型
  1. BEFORE INSERT:在插入操作之前触发。
  2. AFTER INSERT:在插入操作之后触发。
  3. BEFORE UPDATE:在更新操作之前触发。
  4. AFTER UPDATE:在更新操作之后触发。
  5. BEFORE DELETE:在删除操作之前触发。
  6. AFTER DELETE:在删除操作之后触发。
触发器的使用场景
  • 自动填充数据:在插入或更新记录时自动填充某些字段。
  • 维护数据完整性:确保数据库中的数据满足特定的业务规则。
  • 自动更新相关表:在一个表中的数据发生变化时,自动更新另一个表中的数据。
  • 记录数据变更历史:在数据变更时,将变更记录到另一个表中,用于审计和回溯。
创建触发器的语法
sql 复制代码
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name FOR EACH ROW
trigger_body;
  • trigger_name:触发器的名称。
  • BEFORE | AFTER:触发器是在事件之前还是之后触发。
  • INSERT | UPDATE | DELETE:触发器响应的事件类型。
  • table_name:触发器所属的表。
  • FOR EACH ROW:对每一行触发器都会执行。
  • trigger_body:触发器执行的SQL语句块。
示例

假设有一个orders表,我们想要在每次插入新订单时自动记录订单的创建时间。

sql 复制代码
CREATE TRIGGER before_order_insert
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
    SET NEW.created_at = NOW();
END;

在这个例子中,before_order_insert触发器在每次向orders表插入新记录之前触发,并将新记录的created_at字段设置为当前时间。

注意事项
  • 触发器可以访问被触发事件影响的行的新旧数据,使用NEW关键字访问新数据,OLD关键字访问旧数据。
  • 触发器中可以执行的SQL语句类型有限,例如不能执行COMMITROLLBACK
  • 触发器可能会影响数据库性能,特别是在高并发的场景下,应谨慎使用。
  • 触发器可以嵌套,但MySQL限制了最多可以嵌套6层。

触发器是MySQL中一个强大的功能,但也需要谨慎使用,以避免复杂的依赖关系和难以调试的问题。

相关推荐
喜欢就别4 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (2)--- On-Policy Distillation
人工智能·笔记
Lhappy嘻嘻6 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
GLDbalala9 小时前
GPU PRO 5 - 4.6 Adaptive Scalable Texture Compression 笔记
笔记
xian_wwq9 小时前
【学习笔记】模型权重管理:Safetensors与私有化Hub(23/35)
笔记·学习
其实防守也摸鱼9 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
ctrl_v助手9 小时前
Halcon学习笔记2
人工智能·笔记·学习
YUS云生10 小时前
Python学习笔记·第31天:FastAPI入门——路由、路径参数、查询参数与请求体
笔记·python·学习
玖玥拾11 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾11 小时前
Rust 学习目录
开发语言·学习·rust