trigger
进行数据库应用软件开发时,我们有时会碰到表中的某些数据改变,希望同时引起其他相关数据改变的需求,利用触发器就能满足这样的需求。它能在表中的某些特定数据变化时自动完成某些查询。运用触发器不仅可以简化程序,而且可以增加程序的灵活性
触发器是一类特殊的事务,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)。
监视地点(table)、监视事件(insert/update/delete)、触发时间(after/before)、触发事件(insert/update/delete)
需求:
商品表:goods 订单表:ord
当下一个订单时,对应的商品数量要相应减少
分析:
监视:ord
监视动作:insert
触发时间:after
触发事件:update
create trigger 触发器名称
after/before
insert/update/delete
on 监视表
for each row //行级触发器
begin
sql1
...
sqln
end;
delimiter //
create trigger t1
after
insert
on ord
for each row
begin
update goods set num=num-new.much where gid=new.gid;
end//
create trigger t2
after
delete
on ord
for each row
begin
update goods set num = num + old.much where gid=old.gid
end//
#修改订单数量(仅限改数量)
create trigger t3
before
update
on ord
for each row
begin
update goods set num = num + old.much - new.much where gid=old.gid
end//
delmiter ;
show triggers;
drop trigger t1;
delmiter //
#判断库存是否足够
create trigger t1
before
insert
on ord
for each row
begin
#声明变量
declare
goods_num int;
select num into goods_num from goods where gid = new.gid;
#判断
if new.much > goods_num then
set new.much = goods_num;
end if;
update goods set num = num - new.much where gid=new.gid
end//
delmiter ;
网友评论