【发布时间】:2014-08-19 09:50:31
【问题描述】:
有一个函数A,它启动一个事务,做一些工作,然后调用函数B,做更多的工作,然后提交事务。 A 还会捕获任何异常,这些异常会触发回滚而不是提交。
我的问题是,如果 B 遇到错误,我想将该错误记录到我的数据库中,然后阻止 A 中的事务提交。有没有办法做到这一点?我不能只让 B 调用回滚,因为 B 可能被 A 以外的其他函数使用,它们可能会以不同的方式处理异常。所以B还是需要抛出异常,触发回滚。但是,这会清除我刚刚创建的数据库日志条目。那么,有没有办法让函数在事务中间提交单个插入,同时允许事务的其余部分回滚?
供参考:我在带有 InnoDB 表的 MySQL 数据库上使用 Eloquent ORM 在 PHP 中执行此操作。我直接使用原始 SQL 命令没有任何问题,但我不想切换到不同的表类型。
【问题讨论】:
-
。 .记录结果是使用事务的祸根——回滚也会撤消记录。在某些情况下,我使用外部文件来记录日志,但我不确定如何在 MySQL 中执行此操作。
标签: mysql sql transactions