Navicat不会记录未提交的临时表变更,因其无事务式编辑缓冲区,所有设计表修改仅存于窗口内存,关闭即丢失;临时表本身不登记元数据,对象树、DDL标签页、同步向导均不可见,唯一可查方式是人工检查QueryExec.log或查询历史中的CREATE TEMPORARY TABLE语句。

Navicat 不会记录未提交的临时表变更
Navicat 本身不保存任何“未提交”的结构变更状态——它没有事务式编辑缓冲区,也不维护本地暂存区。你右键表 → “设计表”里改了字段名、加了索引,只要没点保存(或执行 ALTER),这些改动就只存在于当前窗口内存中;一旦关闭窗口或切换标签页,全部丢失,且无撤销历史可查。
临时表变更根本不会写入数据库元数据
所谓“临时表”,在 MySQL 中指 CREATE TEMPORARY TABLE 创建的会话级对象,生命周期随连接关闭自动销毁。Navicat 每次新建查询窗口默认建立新连接(除非显式复用),因此:
- 你在某个查询窗口里建的临时表,其他窗口甚至同个 Navicat 实例的其他标签页都看不见
-
SHOW TABLES或左侧面板刷新后不会列出它,information_schema.TABLES里也查不到 - Navicat 的「对象信息」「DDL 标签页」对临时表完全不可用——点击即报错或空白
- 同步向导、结构比对、模型逆向工程等所有功能均忽略临时表,因其不属于持久化 schema
唯一能“追踪”的方式是人工拦截 SQL 执行流
如果你真需要知道某次操作是否创建/修改了临时表,只能靠主动捕获其 DDL 语句本身,而非依赖 Navicat 的日志或界面反馈:
- 打开 Navicat 的「查询历史」(
Ctrl+H),确认该窗口中最近执行过的语句是否含CREATE TEMPORARY TABLE、DROP TEMPORARY TABLE等关键词 - 若已关闭窗口,检查
QueryExec.log文件(路径见【工具】→【选项】→【文件路径】),搜索TEMPORARY字样——但注意:该日志仅记录实际执行成功的语句,未保存的编辑内容不会出现 - MySQL 层面开启
general_log可捕获完整客户端输入(包括临时表语句),但需提前配置,且生产环境禁用 - 别指望「运行历史」窗口(菜单栏:工具 → 运行历史)——它只保留当次会话内手动执行的 SQL,且关闭 Navicat 即清空
真正危险的是你以为它“还在”,其实早已消失
最常被忽略的一点:Navicat 的「设计表」界面如果打开了一个临时表(比如通过 SELECT * FROM temp_user LIMIT 0 触发隐式创建),你点进去修改列,再点保存——它不会执行 ALTER TEMPORARY TABLE(MySQL 不支持该语法),而是静默失败或转成普通表操作,导致行为完全偏离预期。这种“假变更”既不报错、也不留痕,只在下次连接时彻底蒸发。











