2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: MySQL触发器基础等具体操作详解步骤;精典图示-举例说明、注意点及常见报错问题所对应的解决方法IKUN和1原们你这要是学不会我直接退出江湖;好吧!!!

欢迎各位彦祖与热巴畅游本人专栏与博客

你的三连是我最大的动力

以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]

专栏跑道一

➡️网络空间安全——全栈前沿技术持续深入学习

image.gif

专栏跑道二

➡️ 24 Network Security -LJS

image.gif

image.gif

image.gif

专栏跑道三


➡️ MYSQL REDIS Advance operation

image.gif

专栏跑道四

➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]

image.gif

专栏跑道五

➡️RHCE-LJS[Linux高端骚操作实战篇]

image.png

专栏跑道六

➡️数据结构与算法[考研+实际工作应用+C程序设计]

image.gif

专栏跑道七

➡️RHCSA-LJS[Linux初级及进阶骚技能]

image.gif

image.gif

上节回顾




1.MySQL触发器详解

简介

  • 数据库触发器是一种在特定数据操作(如插入、更新或删除)发生时自动执行的动作。本文将介绍MySQL触发器的基础知识和使用方法。

1.1MySQL触发器基础

触发器分类

MySql执行时机和数据操作类型分类表

按执行时机分类 BEFORE触发器: 在数据操作之前执行触发器逻辑
AFTER触发器: 在数据操作之后执行触发器逻辑
按数据操作类型分类 INSERT触发器: 在插入数据之前或之后执行触发器逻辑
UPDATE触发器: 在更新数据之前或之后执行触发器逻辑
DELETE触发器: 在删除数据之前或之后执行触发器逻辑

额外补充举例:

  • BEFORE INSERT触发器可以用于在插入数据之前验证数据完整性
  • AFTER UPDATE触发器可以用于记录数据变更日志等

2.基础常用关键字

2.1MySQL触发器常用关键字详解说明表及对应示例[以下为SQL语句,新人第一次转移博客,比较赶]

BEFORE:

表示在数据操作之前执行触发器逻辑

 1.BEFORE:


-- 在插入数据之前执行的逻辑
CREATE TRIGGER `trigger_before_insert` BEFORE INSERT ON `mytable`
FOR EACH ROW
BEGIN
END;
image.gif
AFTER:

表示在数据操作之后执行触发器逻辑

 2.AFTER:


-- 在更新数据之后执行的逻辑END;
CREATE TRIGGER `trigger_after_update` AFTER UPDATE ON `mytable`FOR EACH ROWBEGIN
image.gif
FOR EACH ROW:

表示针对每一行数据执行触发器逻辑

3.FOR EACH ROW:


-- 针对每一行删除操作执行的逻辑
CREATE TRIGGER `trigger_for_each_row` AFTER DELETE ON `mytable`
FOR EACH ROW
BEGIN
 
END;
image.gif
BEGIN和END:

用于定义触发器的逻辑代码块

4.BEGIN和END:


CREATE TRIGGER `trigger_multiple_statements` AFTER INSERT ON `mytable`
FOR EACH ROW
BEGIN
  DECLARE var INT;
  SET var = NEW.age + 10;
  IF (var > 50) THEN
    -- 逻辑语句1
  ELSE
    -- 逻辑语句2
  END IF;
END;
image.gif
NEW:

代表要插入、更新或删除的新数据引用。可以通过NEW来访问新值

 5.NEW:


CREATE TRIGGER `trigger_new_value` BEFORE INSERT ON `mytable`
FOR EACH ROW
BEGIN
  SET NEW.name = UPPER(NEW.name);
END;
image.gif
OLD:

代表要更新或删除的旧数据引用。只能在UPDATE和DELETE触发器中使用

6.OLD:


CREATE TRIGGER `trigger_old_value` BEFORE UPDATE ON `mytable`
FOR EACH ROW
BEGIN
  IF (OLD.age < NEW.age) THEN
    -- 逻辑语句
  END IF;
END;
image.gif
SET:

用于设置变量的值,可用于对NEW或OLD的字段进行赋值操作

7.SET:


CREATE TRIGGER `trigger_set_value` AFTER INSERT ON `mytable`
FOR EACH ROW
BEGIN
  SET @total = @total + NEW.quantity;
END;
image.gif
IF和THEN:

用于条件判断,控制触发器逻辑的执行流程

8.IF和THEN:


CREATE TRIGGER `trigger_if_then` BEFORE DELETE ON `mytable`
FOR EACH ROW
BEGIN
  IF (OLD.age > 30) THEN
    -- 逻辑语句1
  ELSE
    -- 逻辑语句2
  END IF;
END;
image.gif
INSERT、UPDATE、DELETE: 分别表示插入、更新和删除操作的关键字,可用于在相应类型的触发器中执行相应的逻辑[不在举例;往期已经详解]

 

image.gif 编辑

3.如何定义触发器

语法格式:

-- 触发器逻辑
CREATE TRIGGER trigger_name{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_nameFOR EACH ROWBEGIN   END;
image.gif

触发器定义之选项参数详解说明表:

选项参数 详解说明
trigger_name: 触发器的名称,你可以根据需要自定
{BEFORE | AFTER}: 指定触发器在数据操作之前(BEFORE)或之后(AFTER)执行
{INSERT | UPDATE | DELETE}: 指定触发器在哪种类型的数据操作时触发,可以是插入数据(INSERT)、更新数据(UPDATE)或删除数据(DELETE)
table_name: 指定触发器所属的表名
FOR EACH ROW: 确保触发器逻辑应用于每一行受影响的数据
BEGINEND: 定义了触发器逻辑的开始和结束位置,你可以在其中编写相应的代码来实现需要的业务逻辑

3.2如何创建和删除触发器

  • 创建触发器语法格式:
CREATE TRIGGER trigger_name ...
  • image.gif
  • 删除触发器语法格式:
DROP TRIGGER IF EXISTS trigger_name;
  • image.gif

3.3触发器的执行时机和对应条件

触发器的执行时机和对应条件表

BEFORE触发器: 在数据操作之前执行
AFTER触发器: 在数据操作之后执行
FOR EACH ROW: 对每一行数据执行触发器逻辑


相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
JavaScript 前端开发 安全
JavaScript中的循环控制:while、do-while与for详解
【4月更文挑战第7天】本文探讨JavaScript的三种主要循环结构:while、do-while和for。while循环在满足条件时执行代码块,注意避免无限循环;do-while循环至少执行一次,适合先执行后判断的场景;for循环结合初始化、条件和迭代,适合遍历。理解每种循环的特点和适用场景,结合编程技巧,如使用break和continue,选择合适的循环方式,能提升代码效率和可读性。记得关注循环性能和避免不必要的计算。
560 0
|
JavaScript 前端开发
React+html2canvas+jspdf+antd快速实现前端pdf预览及打印
文章的总结目标实际上就是一个前端pdf打印组件,由於能在往后的其他项目中得以快速上手,并能根据所在项目需要快速自定义扩展,因此組件非常简陋直白,文章是实践过程的记录产物,并不保证完全正确,仅作参考。
React+html2canvas+jspdf+antd快速实现前端pdf预览及打印
|
存储 大数据 API
大数据隐私保护策略:加密、脱敏与访问控制实践
【4月更文挑战第9天】本文探讨了大数据隐私保护的三大策略:数据加密、数据脱敏和访问控制。数据加密通过加密技术保护静态和传输中的数据,密钥管理确保密钥安全;数据脱敏通过替换、遮蔽和泛化方法降低敏感信息的敏感度;访问控制则通过用户身份验证和权限设置限制数据访问。示例代码展示了数据库、文件系统和API访问控制的实施方式,强调了在实际应用中需结合业务场景和平台特性定制部署。
4337 0
|
虚拟化
【虚拟化】VMware 新增网卡后找不到网卡配置问题(已解决)
【虚拟化】VMware 新增网卡后找不到网卡配置问题(已解决)
2141 0
【虚拟化】VMware 新增网卡后找不到网卡配置问题(已解决)
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
|
应用服务中间件 nginx Windows
音视频系列六:Windows搭建Nginx+rtmp推流服务器
在前面 阿里云服务器搭建Nginx+rtmp推流服务器 中,我们已经配置把阿里云的rtmp推流服务搭建好了,用的是PC软件OBS来进行推流到阿里云服务器转发然后本地拉流。Windows也是大同小异,现在是用Windows进行推流服务的搭建,本地ffmpeg命令行推流,本地ffplay拉流播放/VLC拉流播放。
1871 0
音视频系列六:Windows搭建Nginx+rtmp推流服务器
|
4月前
|
安全 Unix Linux
Debian安全扫描工具使用指南(手把手教你用开源工具检测Linux系统漏洞)
本文介绍多款实用的Debian安全扫描工具,帮助用户提升Linux系统安全。涵盖Lynis、OpenVAS、chkrootkit等开源工具的安装与使用,指导初学者进行漏洞检测、配置审计和恶意软件防护,并建议通过定时任务实现自动化扫描,构建多层次安全防御体系。
|
传感器 数据采集 存储
物联网技术在智能环境监测中的部署与优化
物联网技术在智能环境监测中的部署与优化
|
Unix Shell Linux
技术经验分享:Bash脚本命令使用详解
技术经验分享:Bash脚本命令使用详解
996 0
|
人工智能 运维 安全
阿里云飞天企业版“智算升级”,为政企打造AI时代最开放的云
阿里云正式发布飞天智算—飞天企业版V3.18,为政企客户打造AI时代最开放的云。此次升级,飞天企业版将智算能力深度融入云平台,实现“一云多算”,满足政企客户对云平台“云+AI”协同发展需求,为AI技术大规模在政企领域应用做好准备。
1415 11

相关产品

  • 云数据库 RDS MySQL 版