MySql 触发器(trigger)实例

博客围绕MySQL展开,先创建商品表和订单表,接着创建触发器实现增加、取消、更新订单时商品数量自动变化,还给出查看触发器命令。随后进行测试,包括插入数据、提交和修改订单等操作。最后针对购买数量大于库存情况,提出完善触发器的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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触发器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值