mysql触发器

来源:互联网 发布:韩国组合舞蹈知乎 编辑:程序博客网 时间:2024/06/11 15:55
mysql触发器四要素:监视地点:监视的哪个表?监视操作:insert,update,delete?触发操作:insert,update,delete?触发时间:after,before?创建触发器语法:Create trigger triggerNameafter/before insert/update/delete on tableNamefor each row #mysql此处写死,仅支持行触发,oracle、sql_server支持表触发#Beginsql语句 #一句或多句 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 ocreate trigger tg1after insert on ofor each rowbeginupdate  g set num=num-new.much where id=new.gid;end$#demo2删除订单,库存增加create trigger tg2after delete on ofor each rowbeginupdate g set num=num+old.much where id=old.gid;end$#demo3修改订单数量,库存相应改变create trigger tg3after update on ofor each rowbeginupdate g set num=num+old.much-new.much where id=old.gid;end$#demo4before例子,判断insert 的数据是否合法drop trigger tg1#删除掉之前的insert触发器,一个action只能有一个触发器create trigger tg4before insert on ofor each rowbeginif new.much>5then  set new.much=5;end if;update g set num=num-new.much where id=new.id;end$


0 0
原创粉丝点击