我正在使用mysqli类在PHP中进行事务,我发现autocommit()的文档非常不完整。 我从示例中推断,将autocommit设置为false会隐式执行'begin transaction'。它是否正确? 更重要的是,我没有看到autocommit被重置为true的位置,我认为它应该在事务完成之后。调用commit()或rollback()方法时会自动发生吗?
答案 0 :(得分:2)
它不会隐式执行START TRANSACTION
,因为它会执行临时交易:http://dev.mysql.com/doc/refman/5.0/en/commit.html
使用autocommit(false)
,每次执行写入查询时,必须COMMIT
才能在磁盘上永久更新。从那时起,对于该连接中的所有查询都是如此。使用autocommit(true)
,如果您使用START TRANSACTION
,请运行更新,运行COMMIT
,然后运行其他更新,两个更新将立即应用(即没有秒需要COMMIT
。
autocommit
永远不会重置为true
,但它只是按会话设置(MySQL会话,而不是PHP会话)。
答案 1 :(得分:0)
Autocommit(FALSE)将保持为false。执行commit-statement后,自动提交将恢复为true。如果它做同样的事情,则不确定回滚。 我已经用这种方式工作了几年,而且一直都很好。
当您想要数据库中的一致性时,这是一种方法。