MySql 触发器(trigger)实例
1.创建表
商品表(goods)
create table goods(
id int,
name varchar(20),
num smallint
);
订单表(orders)
create table orders(
id int,
goodid int,
count smallint
);
2.创建触发器
增加订单时,商品数量自动减少。
delimiter $$
drop trigger if exists addOrder $$
create trigger addOrder after insert on orders for each row
begin
update goods set num = num-new.count where id =new.goodid;
end $$
delimiter ;
取消订单时,商品数量自动增加。
delimiter $$
drop trigger if exists deleteOrder$$
create trigger deleteOrder after delete on orders for each row
begin
update goods set num = num + old.count where id =old.goodid;
end $$
delimiter ;
更新订单时(更新数量),商品数量自动改变。
delimiter $$
drop trigger if exists updateOrder$$
create trigger updateOrder before update on orders for each row
begin
update goods set num = num + old.count - new.count where id =old.goodid;
end $$
delimiter ;
查看触发器的命令
show triggers \G
3.测试
插入商品数据
insert into goods values(1,'cat',10),(2,'dog',5),(3,'pig',5);
提交订单
insert into orders values(100,2,3);
修改订单(数量)
update orders set count =1 where id = 100;
取消订单
delete from orders where id = 100;
4.扩展
当购买的商品数量大于库存数量时,会发生什么?爆仓!!
我们需要进一步完善触发器,采用如下策略: 当购买的商品数量大于库存数量时,将购买数量更改为库存数量。
delimiter $$
drop trigger if exists addOrder $$
create trigger addOrder before insert on orders for each row
begin
declare
maxNum int;
select num into maxNum from goods where id = new.goodid;
if new.count > maxNum then
set new.count = maxNum;
end if;
update goods set num = num-new.count where id =new.goodid;
end $$
delimiter ;
提交订单
insert into orders values(100,2,8);
同样的方法,完善updateOrder触发器。
还没有评论,来说两句吧...