2012-02-04 36 views
1

数据库是MySQL。我正在寻找实施一个触发器,每当新的评级被放置时更新聚合评级表。然后还有一些其他类似的用例,我期望实现触发器。PHP脚本是否需要等待MySql触发器完成?

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

PS:我的理解是触发器不把逻辑是个好主意,而且可能是我会用一些消息,如RabbitMQ更好。

+1

我的直觉会告诉我,不需要等待触发器运行,但是如果您想要在该连接上运行另一个查询,您可以这样做。也就是说,我从来没有使用触发器,所以我不能发布这个答案。 – 2012-02-04 22:52:04

+0

我假设你的意思是一个AFTER INSERT触发器? – 2012-02-04 23:02:22

+0

如果您想要聚合表的异步更新,那么执行更新脚本的cron脚本或邮件系统gearman/rabbitmq/zeromg将是更好的解决方案。 – 2012-02-04 23:22:39

回答

8

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

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

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

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

+0

感谢这么好的解释。 – 2012-02-05 09:13:34