多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
触发器是一类特殊的事务,可以监视某种数据操作(增删改),并触发相关操作(增删改),自动调用并且执行一定的功能。 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、有时候,可以考虑在应用层来实现类似触发器的功能。