触发器(Trigger)
进行数据库开发时,有 当某些数据变化时,希望其他相关数据改变 的需求
利用触发器 能够完成这样的动作
触发器是一类特殊的事务,可以监视某种数据操作(insert/update/delete)并触发相关操作(insert/update/delete)
使用触发器不仅可以简化程序,而且可以增加程序的灵活性
常见应用场合
当一个订单产生时,订单所购的商品库存量相应减少 (一张表添加或删除时,需要相关表进行同步操作)
当用户进行欠款消费,订单所购商品是否超过用户最大欠款额度(表中数据与其他表数据有联系时)
当新订单产生,及时通过相关人员进行处理(某张表需要跟踪)
触发器四要素
监视地点table 监视事件insert/update/delete 触发时间 after/before 触发事件 insert/update/delete
create trigger t1
after
insert
on order
for each row 每一行受到影响 触发器都会执行 称为行级触发器 mysql不支持语句级触发器
begin
update goods set num=num-2 where gid=1;
end$
使用delimeter 修改mysql解释器 解释符
对于insert 新插入的行 用new表示 被删除的行的值 用old表示
对于update
create trigger t2
after
insert
on order
for each row
begin
update goods set num=num-new.num where gid=new.gid;
查看已有的triggers show triggers \G
删除已有的triggers drop trigger name
create trigger t3
after
delete
on order
for each row
begin
update goods set num=num+old.num where gid=old.gid;
end$
create trigger t4
before
insert
on order
for each row
begin
declare rnum int; 定义变量
select num into rnum from goods where gid=new.gid;
if new.num>rnum then
set new.much=rnum;
end if
update goods set num=num-new.num where gid=new.gid;
end$