必须使用「工具 → 数据传输」而非右键「转储SQL文件」或「导出向导」:在「选项」中仅勾选「创建记录」,取消「创建表」等DDL选项,导出纯INSERT语句。
用「数据传输」工具导出纯数据,不是「转储SQL文件」
navicat 里最常被误用的入口就是右键表或数据库 → 「转储sql文件」——它根本不能只导数据。那个功能本质是调用 mysqldump 或 pg_dump,选“仅结构”或“结构和数据”都绕不开 ddl(create table)。真要纯 insert,必须换路径:工具 → 数据传输。
- 源:选你要导出数据的数据库连接和库名
- 目标:点「文件」单选框,指定输出路径和
.sql文件名(无需提前建) - 关键一步:点「选项」→ 在「记录选项」里只勾选「创建记录」,其他全取消(尤其是「创建表」、「创建视图」等)
- 下一步:在「数据库对象」页,只勾你要导数据的表(不勾视图、函数,它们可能带 INSERT)
导出后检查 SQL 文件是否真没 DDL
即使按上面操作,仍可能混入 CREATE TABLE 或 DROP TABLE,原因有两个:
-
CREATE TABLE出现:你误在「选项」里勾了「创建表」,或者用了「备份」功能(.nb3 格式)而非数据传输 -
INSERT前有SET FOREIGN_KEY_CHECKS=0或TRUNCATE TABLE:这是 Navicat 默认加的安全开关,不算表结构,但属于控制语句;如需彻底干净,得手动删或改高级选项里的「禁用外键检查」为关闭 - 验证命令:
grep -E "^(CREATE|DROP|ALTER|SET|TRUNCATE)" your_dump.sql,结果为空才可信
为什么不能右键单表走「导出向导」
「导出向导」对单表导出有两个硬限制:
- 选 SQL 格式时,它默认只输出
CREATE TABLE+INSERT混合内容,没有纯数据模式 - 选 CSV/Excel 格式虽无 DDL,但会丢字段类型、NULL/NOT NULL 等元信息,且无法直接导入回 MySQL(缺少
LOAD DATA INFILE上下文) - Navicat 15.x 及更早版本中,右键单表 → 「导出向导」→ 取消「仅导出表结构」,仍可能漏掉「创建记录」开关,导致导出空文件或报错
跨库还原时数据怎么匹配已有表结构
导出的纯 INSERT 文件依赖目标库已存在同名表,且字段顺序、类型、约束必须严格一致。常见断点:
- 字段顺序不一致:源表
id,name,age,目标表是name,id,age→ 导入报列数不匹配 - 目标表有自增主键但没设
auto_increment属性 →INSERT失败 - 字符集不同(如源 utf8mb4,目标 latin1)→ 中文变乱码,但不会报错
- 安全做法:先用
SHOW CREATE TABLE table_name对比两边建表语句,再执行INSERT
INSERT INTO ... VALUES (...),不多不少。











