5

数据库是 MySQL。我希望实现一个触发器,该触发器可以在放置新评级时更新汇总评级表。然后还有一些其他类似的用例,我希望在其中实现触发器。

这些触发器可能正在更新联合表。所以我的问题是: 插入新评级的 php 脚本是否需要在 php 脚本完成之前等待触发器完成?

PS:我知道触发器不是放置逻辑的好主意,也许我会更好地使用一些消息传递,例如RabbitMQ

4

1 回答 1

13

触发器是同步的;生成它们的 INSERT/UPDATE/DELETE 会阻塞,直到触发器完成执行,包括触发器执行的任何操作(甚至是由这些操作生成的任何后续触发器)。

触发器是原子的。也就是说,如果触发器执行的任何更改失败,则触发器失败,并且它还会取消生成触发器的更改。

触发器还会在产生触发器的同一事务的范围内进行更改。因此,触发器所做的更改可以与产生触发器的更改一起提交/回滚。如果触发器在您的 PHP 应用程序完成其事务并退出时继续运行,那么将无法确保它们在该事务中发生。

这适用于 BEFORE 触发器和 AFTER 触发器。您的应用程序会阻塞,直到所有触发器都完成。

于 2012-02-04T23:08:51.190 回答