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

来源:这里教程网 时间:2026-02-28 20:40:31 作者:

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
,避免每次手动输

相关推荐