交易和例外

时间:2017-03-20 14:47:56

标签: php mysql

我想我会问,因为我不确定此操作的结果是否与原始性质的交易无关。

当PHP中抛出异常停止执行时,如何处理数据库事务。是否会自动回滚,因为从PHP中删除了与数据库的连接,或者锁定是否仍然存在?

伪代码

jdenticon.update

注意:我知道最好的编码练习要求我在回合中回滚。这只是我想知道的一个行为问题。

1 个答案:

答案 0 :(得分:1)

要确定MySQL在连接(会话)终止时如何处理事务,我们必须考虑是否启用了autocommit模式。

  1. 如果禁用自动提交并且在提交之前终止连接,则最后一次打开transaction is rolled back
  2.   

    如果已禁用自动提交的会话在没有显式提交最终事务的情况下结束,则MySQL将回滚该事务。

    注意,start transaction在交易期间隐式disable autocommit

      

    使用START TRANSACTION,自动提交将保持禁用状态,直到您使用COMMIT或ROLLBACK结束事务。然后,自动提交模式将恢复为先前的状态。

    1. 如果启用了自动提交,则无论如何都会提交任何成功数据修改。如果数据修改语句导致错误,那么显然不会提交更改(嗯,在这种情况下没有变化)。因此,在这种情况下,终止连接不会有任何区别。
    2. 然而,正如@MarkBaker所指出的那样,如果检测到错误以使代码的所有读者都明白这一点,那么显式回滚事务仍然是个好主意。请记住,你自己并不清楚这是如何工作的,如果他们没有在你的代码中看到明确的回滚,那么其他php程序员可能会有同样的问题。