💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。
💅文章概要:触发器是一个被指定关联到-个表的过程式数据库对象,当对一个表的特定事件出现时,它将会被激活。触发器具有MySQL语句在需要时才被执行的特点,即某条(或某些)MySQL语句在特定事件发生时自动执行,本文主要介绍一下MYSQL中六种触发器的案例。
🤟每日一言:只有你爬到山顶了,这座山才会支撑着你。
目录
1.触发器概念
2.触发器的类型
3.触发器的创建
4.触发器实例的创建和使用
(一). after insert触发器实例
(二). before insert触发器实例
(三). after delete触发器实例
(四). before delete触发器实例
(五). after update触发器实例
(六). before update触发器实例
5.触发器的删除
文章概要
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中,创建触发器的一般语句是:
CREATE
TRIGGER trigger_name trigger_time trigger_event
ON tb_name FOR EACH ROW trigger_body
其中:各参数介绍如下
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
表一.png
tbl_teacher
表2.png
2. after insert触发器的创建
DELIMITER //
CREATE TRIGGER after_insert_trigger AFTER INSERT ON tbl_student FOR EACH ROW
begin
INSERT INTO tbl_teacher VALUES("Frank");
end//
DELIMITER ;
3. 效果展示
效果.png
(二). before insert触发器实例
(给定了表tbl_student,每次向tbl_student表插入一条新的记录后,将新插入的记录都更新为"123")
ps: before insert触发器一般用于更新new的值和检查数据
1. 表单结构
tbl_student
表一.png
2. before insert触发器的创建
DELIMITER //
CREATE TRIGGER before_insert_trigger BEFORE INSERT ON tbl_student FOR EACH ROW
begin
set new.stu_id = "123";
end//
DELIMITER ;
3. 效果展示
效果2.png
(三). after delete触发器实例
(给定了表tbl_student和tbl_teacher,每次删除tbl_student表中的记录后,自动删除tbl_teacher表中的所有记录)
1. 表单结构
tbl_student
表一.png
tbl_teacher
表2.png
2. atfer delete触发器的创建
DELIMITER //
CREATE TRIGGER after_delete_trigger after delete ON tbl_student FOR EACH ROW
begin
delete from tbl_teacher;
end//
DELIMITER ;
3. 效果展示
效果3.png
(四). before delete触发器实例
(给定了表tbl_student和tbl_student_2,每次删除tbl_student表中的记录后,自动备份该条记录到tbl_student_2表中)
1. 表单结构
tbl_student
表一.png
tbl_student_2
表3.png
2. before delete触发器的创建
DELIMITER //
CREATE TRIGGER before_delete_trigger before delete ON tbl_student FOR EACH ROW
begin
insert into tbl_student_2 values(old.stu_id);
end//
DELIMITER ;
3. 效果展示
效果4.png
(五). after update触发器实例
(给定了表tbl_student和tbl_student_2,每次更新tbl_student表中的记录后,自动备份该条记录到tbl_student_2表中)
1. 表单结构
tbl_student
表一.png
tbl_student_2
表3.png
2. after update触发器的创建
DELIMITER //
CREATE TRIGGER after_update_trigger after update ON tbl_student FOR EACH ROW
begin
insert into tbl_student_2 values(old.stu_id);
end//
DELIMITER ;
3. 效果展示
效果5.png
(六). before update触发器实例
(给定了表tbl_student,每次更新tbl_student表中的记录后,自动修改其自身表中stu_id 所对应老师的名字为'Frank')
ps: before update触发器一般用于更新表自身中的数据
1. 表单结构
tbl_student
表4.png
2. before update触发器的创建
DELIMITER //
CREATE TRIGGER before_update_trigger before update ON tbl_student FOR EACH ROW
begin
set new.tea_name = 'Frank';
end//
DELIMITER ;
3. 效果展示
效果6.png
5.触发器的删除
在MYSQL中,删除触发器的一般语句是:
DROP TRIGGER [IF EXISTS] trigger_name
其中:各参数介绍如下
[IF EXISTS]
可选项,用于避免在没有触发器的情况下删除触发器
trigger_name
要删除的触发器名称