如果 BEFORE 触发器产生错误,UPDATE 是不是仍然执行?

Posted

技术标签:

【中文标题】如果 BEFORE 触发器产生错误,UPDATE 是不是仍然执行?【英文标题】:Is an UPDATE still executed if a BEFORE trigger creates an error?如果 BEFORE 触发器产生错误,UPDATE 是否仍然执行? 【发布时间】:2010-11-17 23:21:02 【问题描述】:

如果没有,有什么方法可以取消触发器之外的 UPDATE 吗?

【问题讨论】:

【参考方案1】:

EDIT:如果 BEFORE 触发器失败,则 UPDATE 被取消。

我之前的愚蠢回答是指 AFTER 触发器。以防万一有人仍然需要它: 在 AFTER 触发器的情况下,如果触发器失败,则不会取消 UPDATE。对于“取消”更新,必须使用事务,然后在出错的情况下回滚事务,或者在成功的情况下提交事务。 有关 mysql 中事务的更多信息,请访问:http://dev.mysql.com/doc/refman/5.0/en/commit.html

【讨论】:

真的吗,BEFORE 触发器是在更新之后触发的? 哇,对不起。出于某种原因,我认为您的意思是更新发生在触发器之前,所以我的大脑处理它就好像它是触发器之后一样。我的错。如果 BEFORE 触发器失败,则 UPDATE 被取消。

以上是关于如果 BEFORE 触发器产生错误,UPDATE 是不是仍然执行?的主要内容,如果未能解决你的问题,请参考以下文章

Orcale触发器的after/before

BEFORE UPDATE 触发器阻止所有更新

触发器before和after有啥区别?

BEFORE 触发器和 ON UPDATE CURRENT_TIMESTAMP 之间的性能差异 - MySQL

如何创建触发器以检查更新的字段值

mysqlmysql触发器使用示例