深入浅出解析——MYSQL|触发器
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。
💅文章概要:触发器是一个被指定关联到-个表的过程式数据库对象,当对一个表的特定事件出现时,它将会被激活。触发器具有MySQL语句在需要时才被执行的特点,即某条(或某些)MySQL语句在特定事件发生时自动执行,本文主要介绍一下MYSQL中六种触发器的案例。
🤟每日一言:只有你爬到山顶了,这座山才会支撑着你。
文章概要
1.触发器概念
2.触发器类型
3.触发器的创建
4.触发器实例的创建和使用
5.触发器的删除
1.触发器概念
触发器是一个被指定关联到-个表的过程式数据库对象,当对一个表的特定事件出现时,它将会被激活。触发器具有MySQL语句在需要时才被执行的特点,即某条(或某些)MySQL语句在特定事件发生时自动执行。例如:
●每当增加一个客户到数据库的客户基本信息表时,都检查其电话号码的格式是否正确。
●每当客户订购一个产品时,都从产品库存量中减去订购的数量。
●每当删除客户基本信息表中一个客户的全部基本信息数据时,该客户所订购的未完成订单信息也应该被自动删除。
●无论何时删除一行,都在数据库的存档表中保留一个副本。
触发器与表的关系十分密切,用于保护表中的数据。当有操作影响到触发器所保护的数据时,触发器就会自动执行,从而保障数据库中数据的完整性,以及多个表之间数据的一致性。具体而言,触发器就是MySQL响应INSERT、UPDATE和DELETE语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组MySQL语句)。需要注意的是,其他MySQL语句是不支持触发器的。
2.触发器的类型
● INSERT触发器
INSERT触发器可在INSERT语句执行之前或者之后执行,在INSERT触发器内可引用一个名为NEW的虚拟表来访问被插入的行,NEW的值可以被更新
● DELETE触发器
DELETE触发器可在DELETE语句执行之前或者之后执行,在DELETE触发器内可引用一个名为OLD的虚拟表来访问被删除的行,OLD的值不可以被更新,全部是只读的
● UPDATE触发器
UPDATE触发器可在UPDATE语句执行之前或者之后执行,在UPDATE触发器内可引用一个名为NEW的虚拟表来访问被更新的行,也可以引用一个名为OLD的虚拟表来访问更新之前的行,OLD的值全部只读,NEW的值可以被更新
3.触发器的创建
在MYSQL中,创建触发器的一般语句是:
其中:各参数介绍如下
trigger_name
触发器名称,用来区分不同的触发器,名称在当前数据库是唯一的
trigger_name
触发器触发的时间点,有两个参数可选:BEFORE和UPDATE。一般来说,BEFROE节点用于在执行语句执行前对触发器进行调用,AFTER节点用于在执行语句执行后对触发器进行调用。
trigger_event
触发器的事件,有三个参数可以选择:INSERT,DELETE和UPDATE
tb_name
触发器要作用的的数据表
trigger_body
触发器的主体执行语句,可以使用BEGIN...END复合语句结构,下面代码实例中均采用该种复合语句结构
因为触发器的创建和使用不能分割开来,每一个触发器的创建和调用都需要根据具体的实例创建,所以触发器实例的创建和使用全部在下一小节讲解
4.触发器实例的创建和使用
(一). after insert触发器实例
(给定了表tbl_student和tbl_teacher,每次向tbl_student表插入一条新的记录后,自动向tbl_teacher表中赋值"Frank"老师的名字)
1. 表单结构
tbl_student
2. after insert触发器的创建
3. 效果展示
(二). before insert触发器实例
(给定了表tbl_student,每次向tbl_student表插入一条新的记录后,将新插入的记录都更新为"123")
ps: before insert触发器一般用于更新new的值和检查数据
1. 表单结构
tbl_student
2. before insert触发器的创建
3. 效果展示
(三). after delete触发器实例
(给定了表tbl_student和tbl_teacher,每次删除tbl_student表中的记录后,自动删除tbl_teacher表中的所有记录)
1. 表单结构
tbl_student
tbl_teacher
2. atfer delete触发器的创建
3. 效果展示
(四). before delete触发器实例
(给定了表tbl_student和tbl_student_2,每次删除tbl_student表中的记录后,自动备份该条记录到tbl_student_2表中)
1. 表单结构
tbl_student
tbl_student_2
2. before delete触发器的创建
3. 效果展示
(五). after update触发器实例
(给定了表tbl_student和tbl_student_2,每次更新tbl_student表中的记录后,自动备份该条记录到tbl_student_2表中)
1. 表单结构
tbl_student
tbl_student_2
2. after update触发器的创建
3. 效果展示
(六). before update触发器实例
(给定了表tbl_student,每次更新tbl_student表中的记录后,自动修改其自身表中stu_id 所对应老师的名字为'Frank')
ps: before update触发器一般用于更新表自身中的数据
1. 表单结构
tbl_student
2. before update触发器的创建
3. 效果展示
5.触发器的删除
在MYSQL中,删除触发器的一般语句是:
其中:各参数介绍如下
[IF EXISTS]
可选项,用于避免在没有触发器的情况下删除触发器
trigger_name
要删除的触发器名称
- 点赞
- 收藏
- 关注作者
评论(0)