【问题标题】:Does commit or rollback turn autocommit on impliclitly in PHP's mysqli?提交或回滚是否在 PHP mysqli 中隐式打开自动提交?
【发布时间】:2012-09-17 03:16:24
【问题描述】:

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

【问题讨论】:

    标签: php mysqli commit rollback autocommit


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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 会话)。

      【讨论】:

      • 两点还不清楚。如果我将自动提交设置为 false,那么我是否必须明确提交每次写入?我可以不将自动完成设置为“true”并避免这种情况吗?
      • 另外,当您说“如果您使用 START TRANSACTION,运行更新,运行 COMMIT,然后运行另一个...”时,您是否必须调用 COMMIT 才能提交第一个更新? t;hid 不应该自动发生吗?谢谢
      • @Jim 两个问题都是。 autocommit 默认设置为 true。需要说明的是:如果您将autocommit 设置为true,它将不会提交任何未完成的查询;你仍然必须运行COMMIT。我建议你根本不要碰autocommit;只需在需要时显式使用事务处理即可。
      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2019-04-23
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      相关资源
      最近更新 更多