如何关闭自动提交_mysql autocommit设置

5次阅读

MySQL 默认 autocommit=1,每条 DML 立即生效;关闭需 SET autocommit=0(会话级)或用 START TRANSACTION 显式控制事务,MyISAM 不支持事务,连接池中需注意状态残留。

如何关闭自动提交_mysql autocommit 设置

MySQL 默认开启自动提交(autocommit = 1),也就是说每条 INSERT、UPDATE、DELETE 语句都会立即生效并持久化。要关闭它,核心是设置当前会话的 autocommit 变量为 0 或 OFF。

查看当前 autocommit 状态

执行以下命令确认当前设置:

  • SELECT @@autocommit; —— 返回 1 表示开启,0 表示关闭
  • SHOW VARIABLES LIKE 'autocommit'; —— 显示更明确的 ON/OFF 值

临时关闭自动提交(会话级)

该设置只影响当前连接,退出后失效,最常用也最安全:

  • SET autocommit = 0;SET autocommit = OFF;
  • 执行后,所有后续 DML 操作都进入“待提交”状态,必须显式 COMMIT; 才生效,或用 ROLLBACK; 撤销
  • 注意:即使没写 START TRANSACTION,只要 autocommit=0,第一条 DML 就已隐式开启事务

用 START TRANSACTION 显式控制事务边界

相比全局关 autocommit,这种方式更推荐,逻辑更清晰,且事务结束后自动恢复默认行为:

  • START TRANSACTION; 或简写 BEGIN;
  • 执行多条相关 SQL(如转账的扣款 + 入账)
  • 全部成功 → COMMIT;;出错或需撤回 → ROLLBACK;
  • 事务结束,下一条单独 DML 仍按 autocommit=1 自动提交

注意事项和常见误区

不是所有场景都适合关 autocommit:

  • MyISAM 引擎不支持事务 :即使设了 autocommit = 0,也无法真正回滚,建议优先使用 InnoDB
  • 连接池环境要小心 :复用的连接可能残留 autocommit=0 状态,导致意外长事务,最好在获取连接后显式重置 SET autocommit = 1;
  • 命令行启动时自动设置 :可在登录时加参数 mysql --init-command="SET autocommit=0;" -u root -p,避免每次手动输
text=ZqhQzanResources