MySQL默认autocommit=ON,每个DML语句自动提交;设autocommit=0/OFF可关闭(仅当前会话),但MyISAM不支持事务,全局设置需SUPER权限且不推荐,GUI工具可能覆盖该设置。

MySQL 默认开启自动提交(autocommit=ON),每个 INSERT、UPDATE、DELETE 语句都会立即生效并持久化。要关闭它,核心是把 autocommit 设为 0 或 OFF,但需注意作用范围和存储引擎限制。
确认当前自动提交状态
连接 MySQL 后,先查一下是否真的开着:
SHOW VARIABLES LIKE 'autocommit';- 返回结果中
Value是ON或1表示已启用;OFF或0表示已关闭
关闭自动提交(仅当前会话有效)
这是最常用、最安全的方式,不影响其他连接:
可批量生成卡号与密码然后做成实物卡后销售给客户,客户到您的网站来用此卡号密码来提交充值相关游戏卡点、QQ币、其它数字卡等相关信息,(适合做"一卡通")而您在后台可监控客户的提交信息,并手动为客户完成充值后 点击完后重点功能如下:1、卡号、密码批量生成。2、添加和修改游戏名称、区、服务器、充值方法、游戏点卡列隔等充值选择3、开启充值网站和关闭充值网站的功能4、前台用所生成的卡号密
-
SET autocommit = 0;或SET autocommit = OFF; - 执行后,所有后续 DML 语句不会自动提交,必须显式调用
COMMIT;或ROLLBACK; - 也可以先写
START TRANSACTION;或BEGIN;,此时即使 autocommit=ON,也会临时进入事务模式(但推荐统一关 autocommit 来避免混淆)
注意事项:哪些情况关不掉或无效
不是所有场景都能成功关闭自动提交:
-
MyISAM 引擎不支持事务:即使设了
autocommit=0,COMMIT/ROLLBACK也无实际效果(只对 InnoDB、XtraDB 等事务型引擎有效) -
全局设置需权限且不推荐:用
SET GLOBAL autocommit = 0;会影响所有新连接,但需要SUPER权限,且重启后失效;普通应用应避免改全局 - 客户端工具可能覆盖设置:比如某些 GUI 工具(Navicat、DBeaver)默认启用“自动提交”开关,需在连接属性里手动关闭,否则 SQL 命令会被工具拦截重置
验证关闭是否生效的小技巧
关完 autocommit 后,可以快速测试是否真正起效:
- 执行一条
UPDATE语句(如修改某条记录的字段) - 新开一个终端或会话,查同一行数据 —— 应该看不到变化(说明未提交)
- 回到原会话,执行
COMMIT;,再查,变化才可见;或执行ROLLBACK;撤销









