MySQL怎么插入创建一个触发器器?

mysql触发器并发操作过程中,事物不可能出现的问题

亲你好 很高兴为您解答 mysql触发器并发操作过程中,事物不可能出现的问题原因是在对某表操作时同时触发对该表插入,这种操作在mysql数据库是不允许的不可以把触发条件和触发动作作用于同一个表

你对这个回答的评价是?

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

}

没有什么是绝对的好或不好,请深入理解触发器后,根据自己的实际情况再做判断。

触发器的「全部六种情况」及应用场景

  1. BEFORE INSERT : 在插入数据前,检测插入数据是否符合业务逻辑,如不符合返回错误信息。
  2. AFTER INSERT : 在表 A 创建新账户后,将创建成功信息自动写入表 B 中。
  3. BEFORE UPDATE :在更新数据前,检测更新数据是否符合业务逻辑,如不符合返回错误信息。
  4. BEFORE DELETE :在删除数据前,检查是否有关联数据,如有,停止删除操作。
  5. AFTER DELETE :删除表 A 信息后,自动删除表 B 中与表 A 相关联的信息。

这篇教程讲了触发器的全部 6 中情况及对应的应用场景,可以点过去看完整版。

理解了触发器的原理,再说好不好及行不行,有些应用场景如虎添翼,有些是画蛇添足。

如果对你有帮助,点个赞再走。任何问题,欢迎评论区一起交流

}

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

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

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

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

如果往订单表中插入一行记录

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

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

这两步其实应该是一个整体,而我们现在是手工操作。如何让第一步完成后,第二步自动执行呢?

这就可以用到触发器的概念。第一条插入语句的执行,触发了第二条修改库存的SQL

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

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

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

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

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

查看当前已有的触发器:

需要注意点 是,所需要触发的SQL语句都要以‘;’结束。end后面也需要有分界符,但不能再是';'。所以创建触发器之前需要先修改分界符

现在利用触发器对上面的例子进行修改

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

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

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

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

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

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

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

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

after是先完成增删改再触发

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

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

现在购买100个id为4的商品

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

}

我要回帖

更多关于 创建一个触发器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信