当前位置: 首页 > news >正文

MySQL的SQL语句之触发器的创建和应用

触发器  Trigger

一.触发器

作用:当检测到某种数据表发生数据变化时,自动执行操作,保证数据的完整性,保证数据的一致性。

1.创建一个触发器

如上图所示,查看这个create的帮助信息的时候,这个create trigger就是创建触发器的意思。

如上图所示,这是创建触发器的具体语法,方括号括起来的可有可无。

首先是触发器的名称

触发器执行的时间即

BEFORE:表示在触发事件发生之前执行触发器。
AFTER:表示在触发事件发生之后执行触发器。

触发器执行的触发事件

触发器所具体执行的操作。

触发器执行的时间即

BEFORE:表示在触发事件发生之前执行触发器。
AFTER:表示在触发事件发生之后执行触发器。

触发器执行的触发事件

触发器所具体执行的操作。

如上图所示,就是在MySQL数据库中触发器的语法。

案例1:当检测到人员增加的时候,数量自动增加。

如上图所示,这是在为创建触发器做准备工作。

首先是创建了一个指定字符集为utf8的数据库为testdb

然后在这个数据库中创建了一个user表,其中表的字段设置为三个字段,分别是id字段,name字段,age字段,其中的id字段设置为int类型的数据,主键属性,不空,并且配置了自增的属性。

name字段设置了字段类型的数据0

age字段存入int类型的数据。

随后又创建了number表,这个number表中只有number一个字段,这个字段只存入int类型的数据.

向user表的name,age字段插入数据,user01,age为20

向number表的number字段插入数据1

随后可以使用select * from 来查看表的信息。

如上图所示,这就是把SQL语句的结束符改成双叹号。方便写触发器。

如上图所示,这是在MySQL数据库中修改SQL语句的结束符为双叹号,

创建触发器,设置触发器名称为number_auto_add

并且设置这个触发器的执行是在触发事件之后。

具体的触发事件,即导致触发器执行的事件是向表user插入一条数据的时候,触发器开始执行。

随后的begin和end之间是触发体,即触发器具体要执行的命令。

即当user表中的name和age字段更新过后,就执行update表number中的number字段的数值,使得该字段的数值加一。

并且创建触发器,当user表中的数据每增加一行,此时number表中number字段的数值就加一。

触发器中的for each row的意思是让触发器去检测指定表中每行数据的变化。

如上图所示,这就是for each row的意思,检测指定表中每一行数据的变化。所以当表user中的数据增加两行以后,number表中的number字段的数值也就增加2

如上图所示,这是将MySQL数据库中的SQL语句的命令结束符修改为英文分号;

案例2:检测到人员减少,数量自动减少

如上图所示,这是在创建一个触发器

触发器名称为number_auto_reduce

触发器的执行是在触发事件之后,

触发事件是当删除表user中的内容时,执行触发体

其中begin和end之间的触发体是更新number表  set  number字段的数值减去一。

如上图所示,这是对启动触发器的结果进行检验,

案例3:检测到员工增加时,自动添加工资信息

如上图所示,创建了员工表和薪资表,并为这两张表增添新的数据。

new代表的是worker表中新增加的一行信息,而name代表的是新增加的一行信息中的name用户名字段的数据。

new代表的是新数据,对于一张表来说,新增加的一行数据叫做新数据,使用update修改之后的也叫新数据。都可以使用这个new来标识新数据。

old代表的是旧数据是现有的数据。

如上图所示,当我们在表worker中添加新数据后,工资表自动更新,触发器执行触发体。

案例4:检测员工离职时,自动删除其工资信息。

如上图所示,这又是一个触发器,当员工表中有删除操作发生之后,执行触发体,

删除旧的薪资表中的旧数据。

如上图所示,这是触发器的效果演示

new 新数据【添加,更新】

old 旧数据,表中现有的数据

案例5:当检测到员工信息修改时,工资信息自动修改

如上图所示,创建触发器,当员工表中触发更新操作的时候,更新薪资表中旧的name字段数据为新的name字段数据。

如上图所示,是触发器的执行效果。

2.查看触发器

如上图所示,这是在数据库软件中查看触发器的操作,

3.删除触发器

如上图所示,这是删除触发器的操作。

http://www.lryc.cn/news/475904.html

相关文章:

  • myWebserver 介绍
  • 钉钉平台开发小程序
  • 九识智能与徐工汽车达成战略合作,共绘商用车未来新蓝图
  • Serverless + AI 让应用开发更简单
  • 外包功能测试就干了4周,技术退步太明显了。。。。。
  • 外观模式及运用场景
  • PyQt5实战——多脚本集合包,UI以及工程布局(二)
  • Python 数据结构对比:列表与数组的选择指南
  • gem5运行简单RISC-V全系统模拟
  • 洛谷 P1195 口袋的天空
  • ffmpeg视频滤镜:膨胀操作-dilation
  • 3.3 windows,ReactOS系统中页面的换出----2,结构体PHYSICAL_PAGE
  • lvgl
  • 【django】RESTful API 设计指南
  • 提升大数据量分页查询性能:深分页优化全解
  • WPF 实现冒泡排序可视化
  • Claude 3.5 新功能 支持对 100 页的PDF 图像、图表和图形进行可视化分析
  • 正式开源:从 Greenplum 到 Cloudberry 迁移工具 cbcopy 发布
  • Python如何读写文件?
  • 100种算法【Python版】第38篇——Boyer-Moore算法
  • 贪心算法---java---黑马
  • 程序员的减压秘籍:高效与健康的平衡艺术
  • 2024 年 QEMU 峰会纪要
  • C++/list
  • 刘艳兵-DBA015-对于属于默认undo撤销表空间的数据文件的丢失,哪条语句是正确的?
  • 树莓派基本设置--10.使用MIPI摄像头
  • 【ARCGIS实验】地形特征线的提取
  • HTML 基础标签——表格标签<table>
  • 线程函数和线程启动的几种不同形式
  • 数组排序简介-基数排序(Radix Sort)