我是靠谱客的博主 无辜老鼠,最近开发中收集的这篇文章主要介绍mysql修改表分界符号_mysql---触发器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

触发器(trigger)顾名思义能够监视某种情况,当情况发生时,触发某种操作

应用场景:

1、网购过程中。当提交商品订单时,往订单表中插入新记录,触发相应商品表的库存做出相应降低。

2、支付过程中,确认支付时触发验证卡上剩余金额。

等等

以网购的情况举例说明触发器的作用:

现有商品表(goods)。包含商品id(goods_id)。商品名(goods_name)。库存数量(goods_name)

Center

还有订单表(order_table),包含商品id(goods_id)。购买数量(buy_num)

Center

假设往订单表中插入一行记录

838b55d265b8b63fc95337ce6130fb0f.png

代表用户购买了20个商品id为1的商品,即购买了20台小米手机

与此同一时候,在逻辑上goods表中小米手机的库存也应该减去20台。

Center

这两步事实上应该是一个总体。而我们如今是手工操作。怎样让第一步完毕后,第二步自己主动运行呢?

这就能够用到触发器的概念。第一条插入语句的运行。触发了第二条改动库存的SQL

触发器四要素:

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

1fc5e792961cec08094dd3faa6dca546.png

监视地点:触发器监视的对象是表

监视事件:触发器监视的事件仅仅能是增、删、改

触发时间:在监视事件之前还是之后

触发事件:也仅仅能是增、删、改

查看当前已有的触发器:

show triggers;

触发器的创建:

create trigger 触发器名称

after/befor (触发时间)

insert/update/delete (监视事件)

on  表名 (监视地址)

for each row

begin

sql1;

..

sqlN;

end

须要注意点 是,所须要触发的SQL语句都要以‘;’结束。

end后面也须要有分界符。但不能再是';'。

所以创建触发器之前须要先改动分界符

delimiter 分界符

如今利用触发器对上面的样例进行改动

7d25572ac60470b3782867dca2cdda19.png

这个触发器以完毕:当订购了20个商品id为1的商品时。goods表的库存会同步减去20。我们来看看效果

f49d485958b4204f030b8500c2d7eb97.png

商品id为1的商品库存的确减去了20。触发器的确完毕了任务,但这个触发器并不智能。他仅仅能处理商品id为1,购买数量为20的情况。要想应对其它情况须要获得提交订单的记录才行。

触发器引用行变量:

Center

acd6eaeaad828cbec7d083aafea5445c.png

对于insert。插入一行后出现了一个新行用new表示,在触发器中能够通过new.列名来引用插入行各个字段的值

对于delete。删除一行后之前的那行不见了。用old表示。在触发器中能够通过old.列名来引用被删除行各个字段的值

对于update。改动一行后旧的一样用old表示,新的一行用new表示,在触发器中能够通过new.列名来引用改动后行各个字段的值,old.列名来引用改动前各个字段的值。

知道这些后,对触发器进行进一步改动

Center

500e676285a97d162a233765b546343c.png

再看一下效果

没有提交订单前商品表的情况

Center

提交两个订单

Center

商品表变化

ba5d89e5de984c6c03d3eba00f9da988.png

可见触发器的确发生了作用

触发器after和before的差别:

after是先完毕增删改再触发

before是在增删改之前将以推断

前面已经讨论过after的情况。如今假设提交了一个订单购买了100个id为4的商品,然而三星手机库存仅有30个。假设依照上面的触发器。最后库存会变成-70。这显然是不正确的。所以这时候能够利用before来对输入进行推断。假设购买数量大于库存则仅仅能购买所剩下的商品。

d5e80ca17820169a9124734547e149c2.png

0a7f1f073f3daf8b09cb6b5334291995.png

如今购买100个id为4的商品

e5bf8bf30d5285d67063394b24ce9a7b.png

再看看订单表

925726c397510ad7c9125c71ab3c1276.png

实际购买的仅仅有30而不是100

最后

以上就是无辜老鼠为你收集整理的mysql修改表分界符号_mysql---触发器的全部内容,希望文章能够帮你解决mysql修改表分界符号_mysql---触发器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部