实践目标:

1.熟练掌握创建触发器的四要素。

2.能分析需求,给表绑定(创建)触发器实现相关自动化数据处理。

3.结合业务逻辑,查看数据的完整性。

4.管理触发器。

一、需求描述:

创建触发器trig_order_num, 当用户下单时,即订单详情表有数据插入时,同步更新goods表中相应商品的库存量以及销售量。

  1. DROP TRIGGER if EXISTS trig_order_num;
  2. CREATE TRIGGER trig_order_num
  3. BEFORE -- 3. 时机
  4. INSERT -- 2.操作方式
  5. ON ordersitem -- 1.监听谁
  6. FOR EACH ROW
  7. BEGIN
  8. -- 声明变量quantity,用于保存库存量
  9. DECLARE quantity int;
  10. DECLARE price decimal(10,2); -- price 表示对应商品的单价
  11. -- 获取新增商品的库存量和单价分别赋值给quantity,price
  12. SELECT goods.gquantity,goods.gprice INTO quantity,price
  13. FROM goods
  14. WHERE new.gid = goods.gid;
  15. -- 对新增订单详情数量进行分析处理
  16. -- DESC ordersitem;
  17. if new.inum > quantity then
  18. SET new.inum = quantity;
  19. end if ;
  20. -- 1. 更新goods表对应商品的库存量,销售数量
  21. update goods
  22. SET goods.gquantity = goods.gquantity - new.inum, -- 库存
  23. goods.gsale_qty = goods.gsale_qty + new.inum -- 销量
  24. WHERE goods.gid = new.gid;
  25. -- 2. 更新orders表对应订单的金额
  26. UPDATE orders
  27. SET orders.oamount = orders.oamount + new.inum * price
  28. where orders.oid = new.oid;
  29. end;

新增前的goods表

7.6 触发器实训(Trigger) - 图1

新增前的26号订单

7.6 触发器实训(Trigger) - 图2

新增订单

7.6 触发器实训(Trigger) - 图3

新增后查询orders表的变化

7.6 触发器实训(Trigger) - 图4

goods表

7.6 触发器实训(Trigger) - 图5

二、任务描述:

创建触发器trig_goods_type,当更改表goodstype中某个商品类别ID时,同时将goods表对应的商品类别ID全部更新。

  1. -- 创建触发器trig_goods_type,当更改表goodstype中某个商品类别ID时,同时将goods表对应的商品类别ID全部更新。
  2. -- 写创建触发器的框架
  3. DROP TRIGGER if EXISTS trig_goods_type;
  4. CREATE TRIGGER trig_goods_type
  5. AFTER -- 3.
  6. UPDATE -- 2.new 表示更新后的行,old表示更新前的行
  7. ON category -- 1.
  8. FOR EACH row
  9. begin
  10. -- 更新goods表对应的cid
  11. UPDATE goods
  12. SET goods.cid = new.cid, -- 1.
  13. goods.gcode = INSERT(goods.gcode,2,2,LPAD(new.cid,2,'0'))
  14. WHERE goods.cid = old.cid; -- 2.
  15. -- 如何同步修改gcode
  16. -- 字符串函数处理,
  17. -- INSERT(str,pos,len,newstr)
  18. -- REPLACE(str,from_str,to_str)
  19. -- LPAD(str,len,padstr)
  20. -- goods.gcode = INSERT(goods.gcode,2,2,LPAD(new.cid,2,'0'))
  21. end;

7.6 触发器实训(Trigger) - 图6

三、实训小结

1.触发器是能实现自动化操作的表对象,依赖于某个表的增删改操作去自动触发。

2.保证数据的完整性,尤其是复杂的程序逻辑的数据关系,参照完整性。

3.触发器中触发事件写在过程体中,过程体一定不要有查询语句或者返回结果集。

4.认清触发时机after或before不一定很重要。