【MySQL】(基础篇十八) —— 触发器

触发器

本文学习什么是触发器,为什么要使用触发器以及如何使用触发器,还介绍创建和使用触发器的语法。

MySQL语句在需要时被执行,存储过程也是如此。但是,如果你想要某条语句(或某些语句)在事件发生自动执行,怎么办呢?例如:每当增加一个员工到数据库表时,都检查其电话号码格式是否正确,first_name是否为首字母大写;无论何时删除一行,都在某个存档表中保留一个副本。

触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):DELETE;INSERT;UPDATE。

创建触发器

  • 触发时机:触发器可以定义为在事件发生之前(BEFORE)或之后(AFTER)执行。
  • 触发事件:主要有三种触发事件:INSERT(插入新行时)、UPDATE(更新行时)、和 DELETE(删除行时)。
  • 触发器类型:根据触发时机和事件的不同组合,可以创建不同类型的触发器,如 BEFORE INSERT、AFTER UPDATE 等。
  • 操作对象 :触发器可以直接访问和操作触发它们的表(称为"触发表"),还可以访问一个名为 OLD(对于 DELETE 和 UPDATE)和 NEW(对于 INSERT 和 UPDATE)的虚拟表,用来表示触发事件前后的行状态。

触发器名必须在每个表中唯一,但不是在每个数据库中唯一。这表示同一数据库中的两个表可具有相同名字的触发器。

触发器的基本语法:

sql 复制代码
CREATE TRIGGER trigger_name
BEFORE | AFTER trigger_event ON table_name
FOR EACH ROW
BEGIN
    -- 触发器要执行的SQL语句
END;

删除触发器

DROP TRIGGER

使用触发器

在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值);

在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行,OLD中的值全都是只读的,不能更新。

在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问以前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新更新的值。

相关推荐
heartbeat..6 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据8 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦9 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
myzshare9 小时前
实战分享:我是如何用SSM框架开发出一个完整项目的
java·mysql·spring cloud·微信小程序
YMatrix 官方技术社区10 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录10 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong11 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
墨笔之风11 小时前
java后端根据双数据源进行不同的接口查询
java·开发语言·mysql·postgres
欧亚学术11 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客12 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎