网站地图    收藏   

主页 > 后端 > mysql数据库 >

Mysql高级之触发器 - mysql数据库栏目 - 自学php

来源:自学PHP网    时间:2015-04-16 10:50 作者: 阅读:

[导读] 触发器是一类特殊的事务 ,可以监视某种数据操作(insert update delete),并触发相关操作(insert update delete)。看以下事件:完成下单与减少库存的逻辑Insert into o (gid,num) values (2,3);...

触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)。

\

看以下事件:

\

 

完成下单与减少库存的逻辑

Insert into o (gid,num) values (2,3); // 插入语句

Update g set goods_num = goods_num - 3 where id = 2;// 更新过程

这两个逻辑可以看成一个整体,或者说, insert ---> 引来 update

用触发器可以解决上述问题.

我们可以监视某表的变化,当发生某种变化时,触发某个操作.

\

创建触发器的语法

Create trigger triggerName

After/before insert/update/delete on 表名

For each row #这句话是固定的

Begin

Sql语句; # 一句或多句,insert/update/delete范围内

End;

删除触发器的语法:

Drop trigger 触发器名

查看触发器

Show triggers

\

如何在触发器引用行的值

对于insert而言, 新增的行 用new 来表示,

行中的每一列的值 ,用new.列名来表示.

对于 delete来说, 原本有一行,后来被删除,

想引用被删除的这一行,用old,来表示, old.列名,就可以引用被删行中的值.

对于update来说,

被修改的行,

修改前的数据 ,用 old来表示, old.列名引用被修改之前行中的值

修改后的数据,用new 来表示, new.列名引用被修改之后行中的值

\

\

 

触发器里after 和before的区别

After 是先完成数据的增,删,改再触发,

触发的语句晚于监视的增,删,改,无法影响前面的增删改动作.

Before是先完成触发,再增删改,

触发的语句先于监视的增,删,改发生,我们有机会判断,修改即将发生的操作.

典型案例:

对于所下订单,进行判断,如果订单的数量 > 5 ,就认为是恶意订单,

强制把所订的商品数量改成5

\

查看哪些触发器:

\

\

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论