MySQL数据库总结(9)触发器

来源:互联网 发布:什么是数据生态圈 编辑:程序博客网 时间:2024/06/12 22:02

    • 触发器 trigger 一触即发
      • 四要素
      • 创建触发器的语法
      • 如何在触发器引用行的值
      • 触发器里before和after的区别
      • 应用场合

触发器: trigger 一触即发

作用:监视某种情况并触发某种操作

能监视: 增.删.改

触发操作: 增.删.改

四要素:

监视地点、监视事件、触发时间、触发事件

这里写图片描述

创建触发器的语法:

Create trigger triggerNameAfter/before   insert/update/delete   on   表名For each row #这句话是固定的BeginSql语句  #一句或多句,insert/update/delete范围内End;

小技巧:修改结束符 delimiter $

删除触发器: Drop trigger 触发器名;

查看触发器: show triggers;

如何在触发器引用行的值

对于insert而言,新增的行 用new来表示,
行中的每一列的值,用new.列名来表示

对于delete来说,原本有一行,后来被删除,
想引用被删除的这一行,用old,来表示old.列名,就可以引用被删除行中的值

对于update来说,
被修改的行,
修改前的数据,用old来表示,old.列名引用被修改之前行中的值
修改后的数据,用new来表示,new.列名引用被修改之后行中的值

这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述

触发器里before和after的区别

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

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

应用场合:

1.当向一张表中添加或删除记录时,需要在相关表中进行同步操作。
比如,当一个订单产生时,订单所购的商品的库存量相应减少。

2.当表上某列数据的值与其他表中的数据有联系时。
比如,当某客户进行欠款消费,
可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最大限度。

3.当需要对某张表进行跟踪时。
比如,当有新订单产生时,需要及时通知相关人员进行处理,
此时可以在订单表上设计添加触发器加以实现

典型案例:

对于所下订单进行判断,如果订单的数量>5,就认为是恶意订单,
强制把订单的商品数量改成5

  • 监听地点 o表

  • 监听事件 insert

  • 触发事件 update

  • 触发时间 before

  • 目的,触发时间先于监视事件发生,并判断监视事件的数据

Create trigger tg5before insert on oFor each rowBeginIf new.much > 5 then   Set new.much = 5;End if;Update g set num = num – new.much where id = new.gid;End$
0 0
原创粉丝点击