三、触发器

三、触发器:触发trigger (枪击、扳机、引线)

      作用:监视某种情况并触发某种操作,可以监视增删改,触发增删改

      

      监视对象:表

      监视操作:insert

      触发操作:update

      触发时间:after   

      创建触发器语法:

create trigger 触发器名称 after/before insert/update/delete on 表名 for each row begin   sql语句    end; 

                     

改变mysql结束符:delimiter 结束符,可以是#$等,默认是;分号

>delimiter $

>create trigger tg1 after insert on o for each row begin update g set num=num-3 where id=2; end$

如何在触发器中引用行的值,对于新增的行用new表示,行中每一列的值用 new.列名 表示

1、添加订单,库存减少

>create trigger tg2 after insert on o for each row begin update g set num=num-new.muth  where id=new.gid; end$

删除触发器语法:drop trigger 触发器名

实例:2、删除一个订单时,库存相应增加 

         删除之前的数据用old引用,数据列用old.列名

         >create trigger tg3 after delete on o for each row begin update g set num=num+old.much  where id=old.gid; end$

         > delete from o where oid=2$

         此时订单被删除,库存相应增加 

      3、修改一个订单购买数量时,库存相应改变

         对于update,修改前的数据用old表示old.列名 引用修改前的数据,

         修改后的数据用new表示,new.列名  

         >create trigger tg4 after update on o for each row begin update g set num=num+old.much-new.much  where id=old.gid; end$

触发器afterbefore区别:

      after是先完成数据的增删改,再触发,触发监视中的语句晚于增删改,无法影响前面的增删改

      Before是先完成触发在增删改,触发的语句先与触发增删改,我们有机会判断修改即将发生的增删改操作

案例:对于所下订单进行判断,如果订单数量大于5,就认为是恶意订单,强制吧所下订单商品改为5

     对同一表进行的同一触发器不能重复,比如不能有两个insert、两个update、或两个delete,否则会出现执行两次触发器,可以删除一个触发器,“drop trigger 触发器名”,

create trigger tg5

before insert on o

for each row

begin

if new.much > 5 then

  set new.much = 5;

       end if;

       update g set num = num - new.much where id=new.gid;

end$

创建触发器:creater trigger;

删除触发器:delete trigger;

如何查看触发器:show triggers;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值