mysql触发器实验小结_mysql 触发器小结

触发器可以监视某种数据操作(insert/update/delete) 并触发(insert/update/delete)( 创建触发器4要素 监视地点 -----监视事件----触发时间----触发事件 触发器:trigger: 需求: 我们有商品表goods,订单表 ord,当下一个订单时,对应的商品要减少 分析: 监视谁:ord表 监视动作:insert 触发事件:after 触发事件:goods表中库存减少事件,update create trigger  t1 after insert on ord for each row begin update goods xxxxx end; create table goods(     gid int,     name varchar(20),     num smallint ); create table ord(     oid int,     gid int,     much smallint ); insert into goods values (1,'cat',34), (2,'dog',65), (3,'pig',21); delimiter $ create trigger  t1 after insert on ord for each row begin update goods set num=num-2 where gid=1; end$ 查看触发器: show triggers \G 删除已有的triggers drop trigger t1 insert(被监测的语句)产生的数据,能否在触发器中被引用 create trigger  t2 after insert on ord for each row begin update goods set num=num-new.much where gid=new.gid; end$ ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table' #在mysql编程中的for each row 是干什么的? 在oracle 触发器中,触发器分为语句级的触发器和行级触发器 比如 create trigger tn after update on xxtable for each row  #每一行受影响,触发器都指行,叫做行级触发器 begin     sqlN end$ 指行:update xxxtable se xxx=xxx where id>100;  影响100条 那么sqlN会被触发几次?100次 在oracle 中 for each 如果不写, 无论update语句一次影响了多少行,都只执行1次 mysql不支持语句级触发器。必须写上。 查看已有的triggers:show triggers 删除已有的triggers: drop trigger triggerName 撤回一个订单时: create trigger t3 after delete on ord for each row begin     update goods set num=num+old.much where gid=old.gid; end$ #改订单数量 create trigger t4 before update on ord for each row begin     update goods set num=num+old.much-new.much where gid=old.gid; end$ 思考:before 和after的区别 如果发生爆仓情况,如何处理呢? #在t2的基础上,完成much 与num的判断 create trigger  t5 before insert on ord for each row begin declare rnum int; select num into rnum from goods where gid=new.gid; if new.much>rnum then     set new.much=rnum; end if; update goods set num=num-new.much where gid=new.gid; end$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值