【问题标题】:Is it good practice to leave MySQL's "auto commit" mode disabled across a web application?在 Web 应用程序中禁用 MySQL 的“自动提交”模式是一种好习惯吗?
【发布时间】:2017-12-01 06:46:20
【问题描述】:

关于 MySQL 和 InnoDB 表,全局禁用 autocommit 模式是否被认为是一种好习惯,这样整个代码中的所有 SQL 语句都必须显式提交?这是否会引入任何开销或其他不利条件?

【问题讨论】:

    标签: mysql innodb autocommit


    【解决方案1】:

    如果您的框架支持,我的经验是默认启用它会更好。如果忘记提交,未提交的事务可能会锁定大量资源。

    【讨论】:

      【解决方案2】:

      它不会增加任何开销。每个自动提交事务与具有显式开始和提交的事务执行相同的工作,但自动提交事务在每个 SQL 语句完成后立即提交。

      启用自动提交没有缺点。如果您显式启动事务,则仅在您提交之前关闭该会话中的自动提交。然后它会返回自动提交,直到您明确开始另一个事务。

      正如@Sherry 指出的那样,全局关闭自动提交的风险在于,您可能在某个地方的代码没有立即明确提交。当您可能不打算这样做时,这会使交易继续进行。这使得会话保持锁定,可能阻塞其他会话。它还禁止及时清理回滚段。

      在我的应用程序中,我坚持使用自动提交,除非我有特殊情况希望将多个语句收集到一个事务中。然后我就针对该特定情况开始交易。在任何情况下,我都会启用全局自动提交。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-21
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 2019-11-07
        • 2017-06-16
        • 1970-01-01
        相关资源
        最近更新 更多