当前位置: 首页 > 后端技术 > PHP

Mysql高级触发器(trigger)

时间:2023-03-29 20:44:37 PHP

触发器是一种特殊类型的事务,可以监听某些数据操作(insert/update/delete)并触发相关操作(insert/update/delete)。看下面的事件:完成下单减库存的逻辑Insertintoo(gid,num)values(2,3);//insertstatementUpdategsetgoods_num=goods_num-3whereid=2;//update这两个逻辑可以看成一个整体,或者说insert--->attractupdate并使用triggers来解决上面的问题问题。我们可以监听某个表的变化,当某个变化发生时触发操作。创建触发器语法CreatetriggertriggerNameAfter/beforeinsert/update/deleteontablenameForeachrow#这句是固定的BeginSql语句;#一个或多个语句,在insert/update/delete范围内结束;删除触发器语法:Droptrigger触发器名称查看触发器Showtriggers如何引用触发器中行的值。对于insert,新行用new表示,行中每一列的值用new.columnname表示。以delete为例,原来有一行,后来被删除了。如果要引用被删除的行,就用old来表示,old。列名,可以参考被删除行中的值。对于update,修改的行,修改前的数据用old,old表示。列名是指行中修改前的值。修改后的数据用new、new表示。列名是指行中修改后的值。触发器中的After和BeforeAfter的区别是在触发前完成数据的增删改查。触发语句晚于监控增删改查,不能影响之前的增删改查动作。Before是先完成触发器,然后增删改查,触发语句在增删改查之前,我们有机会判断和修改即将进行的操作。典型案例:对于下的订单,做一个判断,如果订单的数量>5,则认为是恶意订单,将订单的商品数量改为5,看是触发了什么: