mysql触发器

mysql触发器四要素:
监视地点:监视的哪个表?
监视操作:insert,update,delete?
触发操作:insert,update,delete?
触发时间:after,before?
创建触发器语法:
Create trigger triggerName
after/before insert/update/delete on tableName
for each row #mysql此处写死,仅支持行触发,oracle、sql_server支持表触发#
Begin
sql语句 #一句或多句 insert/update/delete语句#
End
删除触发器语法:
Drop trigger triggerName;
显示已有触发器语法:
Show triggers
对insert而言,新插入的行用new来表示,行中每一列的值用new.列名来表示
对于delete而言,删除的行用old来表示,行中每一列的值用old.列名来表示
对于update而言,被修改的行,修改前的数据,用old来表示,old.列名;修改后的数据,用new来表示,new.列名
after是先完成数据的增删改,再触发,触发中的语句晚于数据的增删改;
before是先触发再做数据的增删改,触发中的语句先于监视的增删改,我们有机会判断,修改即将发生的操作
#deom1添加订单,库存减少(商品库存表g,订单表o)
delimiter $   #定义$为结束符
truncate o$ #清空table o
create trigger tg1
after insert on o
for each row
begin
update  g set num=num-new.much where id=new.gid;
end$
#demo2删除订单,库存增加
create trigger tg2
after delete on o
for each row
begin
update g set num=num+old.much where id=old.gid;
end$
#demo3修改订单数量,库存相应改变
create trigger tg3
after update on o
for each row
begin
update g set num=num+old.much-new.much where id=old.gid;
end$
#demo4before例子,判断insert 的数据是否合法
drop trigger tg1#删除掉之前的insert触发器,一个action只能有一个触发器
create trigger tg4
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.id;
end$


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值