触发器(trigger):监视某种情况,并触发某种操作,它的执行是由事件来触发的,
例如当对一个表进行操作( insert,delete, update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。 触发器创建语法四要素:
1.监视地点(table)
2.监视事件(insert/update/delete)
3.触发时间(after/before)
4.触发事件(insert/update/delete)
1、创建触发器 语法
:
Create trigger trigger_name trigger_time trigger_event on tb_name for each row trigger_stmt;
其中:
trigger_time :触发器的触发事件,可以为before(在检查约束前触发)或after(在检查约束后触发);
trigger_event:是触发器的触发事件,包括insert、update和delete;
tb_name: 表示建立触发器的表名,就是在哪张表上建立触发器
trigger_stmt: 触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句;
FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器。
例子:
-- 创建商品表
create table g(
id int primary key auto_increment,
name varchar(20),
num int
);
-- 创建订单表
create table o(
oid int primary key auto_increment,
gid int,
much int
);
-- 插入商品
insert into g(name,num) values('苹果',10),('香蕉',10),('桔子',10);
-- 1.往订单表插入一条记录
-- insert into o(gid,much) values(1,3);
-- 2.更新商品表商品1的剩余数量
-- update g set num=num-3 where id=1;
创建触发器:
delimiter $ -- 默认 sql语句是以 分号结尾的 ,delimiter 可以修改,,在这里我们修改为以$结尾
create TRIGGER tg1 after insert on o for each row -- 创建触发器
begin
update g set num = num-3 where id = 1; -- 当事件被触发后执行
end $
delimiter ; -- 我们再改为 分号 结尾
insert into o(gid,much) VALUES(1,3); --- 测试用例
2、删除触发器:
Drop trigger 触发器名称。
drop trigger tg1 ;