我想我会问,因为我不确定此操作的结果是否与原始性质的交易无关。
当PHP中抛出异常停止执行时,如何处理数据库事务。是否会自动回滚,因为从PHP中删除了与数据库的连接,或者锁定是否仍然存在?
伪代码
jdenticon.update
注意:我知道最好的编码练习要求我在回合中回滚。这只是我想知道的一个行为问题。
答案 0 :(得分:1)
要确定MySQL在连接(会话)终止时如何处理事务,我们必须考虑是否启用了autocommit
模式。
如果已禁用自动提交的会话在没有显式提交最终事务的情况下结束,则MySQL将回滚该事务。
注意,start transaction
在交易期间隐式disable autocommit:
使用START TRANSACTION,自动提交将保持禁用状态,直到您使用COMMIT或ROLLBACK结束事务。然后,自动提交模式将恢复为先前的状态。
然而,正如@MarkBaker所指出的那样,如果检测到错误以使代码的所有读者都明白这一点,那么显式回滚事务仍然是个好主意。请记住,你自己并不清楚这是如何工作的,如果他们没有在你的代码中看到明确的回滚,那么其他php程序员可能会有同样的问题。