【发布时间】:2017-12-01 06:46:20
【问题描述】:
关于 MySQL 和 InnoDB 表,全局禁用 autocommit 模式是否被认为是一种好习惯,这样整个代码中的所有 SQL 语句都必须显式提交?这是否会引入任何开销或其他不利条件?
【问题讨论】:
标签: mysql innodb autocommit
关于 MySQL 和 InnoDB 表,全局禁用 autocommit 模式是否被认为是一种好习惯,这样整个代码中的所有 SQL 语句都必须显式提交?这是否会引入任何开销或其他不利条件?
【问题讨论】:
标签: mysql innodb autocommit
如果您的框架支持,我的经验是默认启用它会更好。如果忘记提交,未提交的事务可能会锁定大量资源。
【讨论】:
它不会增加任何开销。每个自动提交事务与具有显式开始和提交的事务执行相同的工作,但自动提交事务在每个 SQL 语句完成后立即提交。
启用自动提交没有缺点。如果您显式启动事务,则仅在您提交之前关闭该会话中的自动提交。然后它会返回自动提交,直到您明确开始另一个事务。
正如@Sherry 指出的那样,全局关闭自动提交的风险在于,您可能在某个地方的代码没有立即明确提交。当您可能不打算这样做时,这会使交易继续进行。这使得会话保持锁定,可能阻塞其他会话。它还禁止及时清理回滚段。
在我的应用程序中,我坚持使用自动提交,除非我有特殊情况希望将多个语句收集到一个事务中。然后我就针对该特定情况开始交易。在任何情况下,我都会启用全局自动提交。
【讨论】: