必须关闭navicat 16自动提交,否则update/delete无确认即生效且无法回滚;正确路径是右键连接→编辑连接→高级选项卡→取消“自动提交”→重新连接;关闭后需手动begin/commit/rollback,并以右下角“transaction”标识为准。
navicat 16 默认开启自动事务(auto-commit),执行 update、delete 等语句时不会弹确认框,一敲回车就生效——这不是“执行快”,是危险快。
为什么必须关掉 Auto-Commit?
默认开启时,任意修改语句(哪怕没写 WHERE)都会立即提交,无法 ROLLBACK;多人共用一个连接时,你开的 Query 标签页和同事的共享同一事务上下文,SET @var := 1 后对方也能读到;右下角状态栏不显示 Transaction 字样,容易误判当前是否在事务中。
关闭 Auto-Commit 的真实路径(不是菜单直觉位置)
这个设置不在「编辑器」或「SQL 编辑器」页里,而在连接级配置中:
- 右键左侧连接列表中的目标数据库(如
192.168.1.100:3306)→ 选择编辑连接… - 切换到
高级选项卡 - 取消勾选
自动提交(注意:不是「自动执行」,也不是「执行后自动刷新」) - 点
确定→ 必须重新双击该连接进入,旧 Query 标签页仍沿用旧设置
关掉之后怎么安全执行修改语句?
关闭后,UPDATE 和 DELETE 不再自动生效,需手动控制事务生命周期:
- 执行前先写
BEGIN;或直接点工具栏开始事务按钮(图标为两个重叠方块) - 执行修改语句,可随时在同个 Query 标签页里运行
SELECT验证效果 - 确认无误后运行
COMMIT;;出错或想撤回,运行ROLLBACK; - 右下角状态栏出现
Transaction字样,才是事务已激活的唯一可信信号
容易被忽略的兼容性细节
某些数据库驱动(如 MySQL 8.0+ 的 X DevAPI 连接、SQL Server 的 Windows 身份验证模式)会忽略客户端的 Auto-Commit 设置,强制服务端控制;此时即使 Navicat 关了,执行 DML 仍可能立刻提交。验证方式很简单:执行 UPDATE users SET name='test' WHERE id=999999;(确保无匹配行),再立刻执行 SELECT @@autocommit; —— 若返回 1,说明服务端未受控,得去数据库侧配 SET SESSION autocommit = OFF;。











