触发器是一类特殊的事务,可以监视某种数据操作(增删改),并触发相关操作(增删改),自动调用并且执行一定的功能。
1、创建语法
create trigger t_name t_time t_event on tbl_name for each row t_stmt;
四要素:
(1) 监视地点 tbl_name
(2) 监视事件 t_event
insert/update/delete
(3) 触发时间 t_time
before:表示在检查约束前触发
after:表示在检查约束后触发
(4) 触发事件 t_stmt
多语句的触发器,用 begin/end; 来表示触发器操作的开始和结束(需要更改结束符,delimiter //)。
行变量 new 和 old 表示新/旧数据。
for each row 表示是行级触发的,也就是以行为单位,数据库也可以支持语句级触发,MySQL 只支持行级触发。
2、应用场景
有时在进行数据库应用开发中,需要在某些表的数据改变时,会引起相关数据的改变,使用触发器就能满足这样的需求。
比如:
在创建订单时,自动减少库存/及时通知相关人员去处理爆仓。
当客户进行透支消费时,可以通过设计触发器来判断用户累计欠款是否超出了最大限额。
3、查看触发器
show triggers \G;
show create trigger t_name;
select * from information_schema.triggers where trigger_name = 't1';
4、删除触发器
drop trigger [db_name.]t_name;
简单编程:
create trigger t1
before
insert
on order
for each row
begin
declare int rnum;
select num into rnum where gid=new.gid;
if new.much > rnum then
set new.much = rnum;
endif;
update goods set num = num - new.much where gid = new.gid;
end$
总结:
1、触发器自动完成某些操作、简化程序、增加程序灵活性。
2、触发器只能创建在永久表上,不能对临时表创建触发器。
3、同一个表相同触发时间、相同触发事件的情况下,只能定义一个触发器。
4、有时候,可以考虑在应用层来实现类似触发器的功能。