数据库是MySQL。我希望实现一个触发器,每当新的评级被放置时,它会更新聚合评级表。然后还有一些其他类似的用例,我正在寻找实现触发器。
这些触发器可能正在更新联合表。所以我的问题是: 在php脚本完成之前,插入新评级的php脚本是否需要等待触发器完成?
PS:我理解触发器放置逻辑并不是一个好主意,而且我可能会更好地使用RabbitMQ这样的消息传递。
答案 0 :(得分:9)
触发器是同步的;产生它们的INSERT / UPDATE / DELETE会阻塞,直到触发器完成执行,包括触发器执行的任何操作(甚至这些操作产生的任何后续触发器)。
触发器是原子的。也就是说,如果触发器执行的任何更改失败,则触发器将失败,并且还会取消产生触发器的更改。
触发器还会对产生触发器的同一事务的范围进行更改。因此,触发器所做的更改可以与产生触发器的更改一起提交/回滚。如果在PHP应用程序完成其事务并退出时触发器仍在运行,那么就无法确保它们在该事务中发生。
这适用于BEFORE触发器和AFTER触发器。您的应用会阻止所有触发器完成。