MySql触发器详解

Trigger:扳机、处罚、引发

定义:触发器一类特殊的事务,用于 监视 某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)

触发器可以增强程序的灵活性。

应用场合

  1. 向表添加或者删除记录时,需要在相关表进行同步操作:下单时,商品库存减少

  2. 当某列数据的值与其他表种的数据有关联时:生成订单通过触发器判断累计欠款是否超过最大的额度

  3. 对某张表跟踪:当有新订单产生时,需要通过相关人员处理

创建

触发器创建的四个要素:

file
  1. 监视地点

  2. 监视时间

  3. 触发时间(after/before)

  4. 触发事件

需求演示

商品表 goods

订单表 order

当下单时,对应的商品的库存量需要进行减少操作

分析:

  1. 监视地点: order

  2. 监视事件: insert

  3. 触发时间:after

  4. 触发事件:update goods

创建测试表:

编写触发器:

注意

要获取插入/修改的新行,需要引用行变量new

要获取删除/修改的旧行,需要引用行变量old

限制购买数量

for each row:

mysql触发器中的for each row是做什么的?

在oracle触发器中,分为

  1. 语句级触发器

  2. 行级触发器

如果是行级触发器,update语句如果更新了100行记录,触发器将会被触发100次

如果是语句级触发器,update语句如果更新了100行记录,触发器仍然只会触发1次

mysql目前没有语句级别的触发器,在oracle中如果for each row 不写,则是语句级触发器

语句级触发器的使用场景:1人下单,买了5件商品,修改了五次库存,发送一条发货提醒

最后更新于

这有帮助吗?