由于项目经理临时有事,被安排面试一个新人,期间聊到了MySql的存储过程、触发器等知识,发现他对这一块的知识比较陌生,由于之前讲过存储过程,现在就讲讲什么是触发器。其实触发器很好理解,按照字面意思,就是会触发一系列事件操作的东西。
基本概念:触发器是与表事件相关的特殊存储过程,它的执行不由程序调用,也非手工启动,而是由事件触发而被执行的(需要区别存储过程:存储过程则需要主动调用其名字执行)
触发器(trigger):事先为某张表绑定一段代码,当表中的某些内容发生增、删、改时,系统会自动触发代码并执行。
讲解触发器的经典案例,就是下订单,比如存货100件,如果下订单购买10件,该商品的库存量需相应减少,即买几个商品就减少多少个库存量,先看建表语句:
1
2
3
4
5
6
7
8
9
10
11
12
13create table goods( gid int, name varchar(20), num smallint ); create table ord( oid int, gid int, much smallint ); insert into goods values(1,'cat',100); insert into goods values(2,'dog',200); insert into goods values(3,'pig',300);
创建触发器语句如下:
1
2
3
4
5
6
7
8
9
10
11
12DROP TRIGGER IF EXISTS databaseName.tri_Name; CREATE TRIGGER tri_Name -- tri_Name代表触发器名称 tirgger_time trigger_event on tableName -- tirgger_time为触发时机,可选值有after/before,trigger_event为触发事件,可选值有insert/update/delete FOR EACH ROW -- 这句话在mysql是固定的,表示任何一条记录上的操作满足触发事件都会触发该触发器。 BEGIN sql语句; END (1)查看已有触发器:SHOW TRIGGERS (2)删除已有触发器:DROP TRIGGER triggerName
1
2
3
4
5
6
7
8CREATE TRIGGER t1 AFTER INSERT ON ord FOR EACH ROW BEGIN UPDATE goods SET num=num-2 WHERE gid = 1; END
我们现在已经建立了一个简单的存储过程,只要订单表ord的gid=1的商品有INSERT(只要买了猫cat,猫的存货就减少2,当然,实际开发过程中减去的具体值,需要是订单购买数量值),看如下过程:
我们执行一下插入操作:INSERT INTO ord VALUE(1,10,66)
触发器创建的四个要素
1)监视地点(table)
2)监视事件(insert/update/delete)
3)触发时间(after/before)
4)触发事件(insert/update/delete)
监视谁:ord(订单表)
监视事件:insert(ord表插入操作)
触发时间:after(在ord插入操作后触发)
触发事件:update(触发更新操作 goods表更新)
触发器中引用行变量
1)在触发目标上执行insert操作后会有一个新行,如果在触发事件中需要用到该新行的变量,可以用new关键字表示
2)在触发目标上执行delete操作后会有一个旧行,如果在触发事件中需要用到该旧行的变量,可以用old关键字表示
3)在触发目标上执行update操作后原纪录是旧行,新记录是新行,可以使用new和old关键字来分别操作
为了解释上面这句话,我们创建一个t2、t3、t4触发器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24CREATE TRIGGER t2 AFTER INSERT ON ord FOR EACH ROW BEGIN UPDATE goods SET num=num-new.much WHERE gid=new.gid; END CREATE TRIGGER t3 AFTER DELETE ON ord FOR EACH ROW BEGIN UPDATE goods SET num=num+old.much WHERE gid=old.gid; END CREATE TRIGGER t4 BEFORE UPDATE ON ord FOR EACH ROW BEGIN UPDATE goods SET num=num+old.much-new.much WHERE gid = 1; END
最后
以上就是难过大碗最近收集整理的关于什么是MySql触发器?作用是什么?的全部内容,更多相关什么是MySql触发器内容请搜索靠谱客的其他文章。
发表评论 取消回复