MySql 触发器(trigger)实例

矫情吗;* 2022-02-03 02:57 450阅读 0赞

1.创建表

商品表(goods)

  1. create table goods(
  2. id int,
  3. name varchar(20),
  4. num smallint
  5. );

订单表(orders)

  1. create table orders(
  2. id int,
  3. goodid int,
  4. count smallint
  5. );

2.创建触发器

增加订单时,商品数量自动减少。

  1. delimiter $$
  2. drop trigger if exists addOrder $$
  3. create trigger addOrder after insert on orders for each row
  4. begin
  5. update goods set num = num-new.count where id =new.goodid;
  6. end $$
  7. delimiter ;

取消订单时,商品数量自动增加。

  1. delimiter $$
  2. drop trigger if exists deleteOrder$$
  3. create trigger deleteOrder after delete on orders for each row
  4. begin
  5. update goods set num = num + old.count where id =old.goodid;
  6. end $$
  7. delimiter ;

更新订单时(更新数量),商品数量自动改变。

  1. delimiter $$
  2. drop trigger if exists updateOrder$$
  3. create trigger updateOrder before update on orders for each row
  4. begin
  5. update goods set num = num + old.count - new.count where id =old.goodid;
  6. end $$
  7. delimiter ;

查看触发器的命令

  1. show triggers \G

3.测试

插入商品数据

  1. insert into goods values(1,'cat',10),(2,'dog',5),(3,'pig',5);

20190508174816628.png

提交订单

  1. insert into orders values(100,2,3);

2019050817500695.png 20190508175022841.png

修改订单(数量)

  1. update orders set count =1 where id = 100;

20190508175046274.png 20190508175103254.png

取消订单

  1. delete from orders where id = 100;

2019050817511822.png

4.扩展

  1. 当购买的商品数量大于库存数量时,会发生什么?爆仓!!
  2. 我们需要进一步完善触发器,采用如下策略: 当购买的商品数量大于库存数量时,将购买数量更改为库存数量。
  3. delimiter $$
  4. drop trigger if exists addOrder $$
  5. create trigger addOrder before insert on orders for each row
  6. begin
  7. declare
  8. maxNum int;
  9. select num into maxNum from goods where id = new.goodid;
  10. if new.count > maxNum then
  11. set new.count = maxNum;
  12. end if;
  13. update goods set num = num-new.count where id =new.goodid;
  14. end $$
  15. delimiter ;
  16. 提交订单
  17. insert into orders values(100,2,8);

20190508181634411.png 20190508181651996.png

  1. 同样的方法,完善updateOrder触发器。

发表评论

表情:
评论列表 (有 0 条评论,450人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mysql触发器Trigger

    一、什么是触发器    简单来说就是当某个表发生某些操作(插入、删除、更新)时,自动触发预先编译好的多条sql语句 二、创建触发器    模式如:create trigg

    相关 mysql触发器trigger笔记

    > 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 > > 举个例子,比如你现在有