4

我正在使用 mysqli 类在 PHP 中进行交易,我发现 autocommit() 的文档非常不完整。我从示例中推断,将 autocommit 设置为 false 会隐式执行“开始事务”。这个对吗?更重要的是,我看不到自动提交在哪里被重置为 true,我认为它应该是在事务完成后。这会在调用 commit() 或 rollback() 方法时自动发生吗?

4

2 回答 2

2

它不会隐式执行 a 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 会话)。

于 2012-09-25T15:09:00.983 回答
0

对于以下查询,Autocommit(FALSE) 将保持为 false。执行提交语句后,自动提交将恢复为 true。不确定回滚是否相同。我已经使用这种方式几年了,它一直运行良好。

当您希望数据库保持一致性时,这是一种方法。

于 2018-02-27T05:02:22.587 回答