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

MySQL 默认开启自动提交(autocommit = 1),也就是说每条 INSERT、UPDATE、DELETE 语句都会立即生效并持久化。要关闭它,核心是设置当前会话的 autocommit 变量为 0 或 OFF。
查看当前 autocommit 状态
执行以下命令确认当前设置:
-
SELECT @@autocommit;—— 返回 1 表示开启,0 表示关闭 -
SHOW VARIABLES LIKE 'autocommit';—— 显示更明确的 ON/OFF 值
临时关闭自动提交(会话级)
该设置只影响当前连接,退出后失效,最常用也最安全:
除了有一半电子商务的全部基本功能外,还增加了“模版自由更换”“程序在线自动更新升级”“分布式搜索”等特色功能 主要功能: ·网站的基本信息设置,部分数据以XML方式同服务器发生交互。 ·可自行关闭和开启网站,方便维护,可自定维护时显示的代码。 ·可自定义站点的关键字和描述,方便搜索引擎找到您的网站。 ·可自定义商品图片、新闻图片的上传目录和预览图片的大小。 ·提供自己设置网站的邮件发送服务器SM
-
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,避免每次手动输









