我正在使用mysqli类在PHP中进行交易,并发现autocommit()的文档非常不完整。
我从示例推断出,将autocommit设置为false会隐式执行“begin transaction”。这是正确的吗?
更重要的是,我没有看到autocommit何时重置为true,我假设在事务完成后应该这样做。当调用commit()或rollback()方法时,是否会自动发生这种情况?
autocommit(false)
,每次执行写入查询时必须COMMIT
才能将其永久更新到磁盘上。从那时起,在该连接中的所有查询都是如此。如果使用autocommit(true)
,运行一个更新前使用START TRANSACTION
,然后运行COMMIT
,再运行另一个更新,那么两个更新将立即应用(即不需要第二个COMMIT
)。
autocommit
永远不会重置为true
,但它仅在会话期间设置(MySQL会话,而不是PHP会话)。Autocommit(FALSE)会在下面的查询中保持不变。在执行提交语句后,autocommit会恢复到true状态。如果回滚操作也是这样,则不确定。
我使用这种方式已经几年了,一直都很好用。
当您希望数据库具有一致性时,这是一种方法。
autocommit
默认设置为true
。但要明确一点:如果您将autocommit
设置为true,则不会提交任何未完成的查询;您仍然必须运行COMMIT
。我建议您根本不要触摸autocommit
;只有在需要时才显式使用事务处理。 - Explosion Pills