最可靠方式是使用「转储SQL文件 → 结构-only」:右键数据库或表→【转储SQL文件】→选【结构-only】→保存,生成纯DDL语句;其他方式如数据传输需关闭“创建记录”,HTML仅作文档,查information_schema适合元数据采集。

Navicat Premium 中只备份表结构,最可靠、最常用的方式是使用「转储SQL文件 → 结构-only」功能。其他路径(如数据传输)容易误勾选导致混入数据或执行 DDL,不推荐作为首选。
用「转储SQL文件」导出纯结构(MySQL/PostgreSQL 推荐)
这是最直接、语义最清晰、结果最可控的方式,生成标准 CREATE TABLE 语句,不含任何 INSERT。
- 右键目标数据库或具体表 → 选择【转储SQL文件】→ 点击【结构-only】单选按钮(不是“结构和数据”)
- 确认保存路径,点击【开始】;完成后打开 .sql 文件,应只看到
CREATE TABLE、COMMENT、PRIMARY KEY、ENGINE等 DDL,无INSERT行 - ⚠️ 常见错误:误点【结构和数据】——会导致文件巨大且含大量
INSERT,恢复时可能因max_allowed_packet不足而失败 - ✅ 优势:兼容性好,输出可读性强,适合归档、Code Review、CI/CD 中校验结构变更
用「数据传输」工具导出结构(需手动关掉记录插入)
这个功能本意是跨库迁移,但可用于结构导出;关键在于必须关闭「创建记录」选项,否则默认会导出数据。
- 菜单栏 → 【工具】→ 【数据传输】→ 设置源为当前库,目标选【文件】→ 指定 .sql 路径
- 点击【选项】按钮 → 取消勾选【创建记录】(有些版本叫「Insert records」或「Export data」)
- 在【数据库对象】页中勾选需要导出的表(不勾选则导出空结构)
- ⚠️ 容易踩的坑:旧版 Navicat 中该选项默认开启;Premium 16+ 的「高级」页里若看到「插入记录」仍被勾选,说明没关干净
- ⚠️ 注意:此方式生成的 SQL 可能含
DROP TABLE IF EXISTS和CREATE TABLE,但不含数据;若目标环境不允许 DROP,需手动删掉前面几行
导出 HTML 格式结构文档(用于人工查阅或交接)
当你要给非 DBA 成员(如前端、测试)提供可读性高的表结构说明时,HTML 描述页比 SQL 更友好。
- 在对象浏览器中选中数据库 → 【工具】→ 【描述】→ 左侧勾选要描述的表(支持多选)
- 切换到【HTML】选项卡 → 勾选【列】、【索引】、【外键】、【注释】等需要展示的元信息
- 设置标题(如
订单中心表结构 v2.3),点击【生成】→ 保存为 .html 文件 - ⚠️ 注意:该 HTML 不含建表语句,不能用于重建结构;仅作文档用途,字段顺序、约束细节不如 SQL 精确
- ✅ 优势:带超链接跳转、支持中文注释渲染、可直接发邮件或嵌入 Confluence
用查询 information_schema 提取字段清单(灵活但需手写 SQL)
当你只需要字段名、类型、是否为空、默认值、注释等基础元数据(比如导入 Excel 做数据字典),直接查系统表最快。
- 新建查询 → 执行类似语句:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'your_table' ORDER BY ORDINAL_POSITION;
- 右键结果集 → 【复制为】→ 【Excel格式】或【CSV格式】→ 粘贴到表格软件中整理
- ⚠️ 注意:不同数据库语法略有差异(如 PostgreSQL 用
pg_attribute+pg_class),MySQL 最稳定;字段顺序靠ORDINAL_POSITION保证,别用column_name排序 - ✅ 优势:轻量、可批量查多张表(改 WHERE 条件即可),适合自动化脚本前置采集
真正只导出结构这件事,核心不在“怎么点”,而在于你是否意识到:Navicat 从不自动判断“哪些是结构、哪些是数据”——它只按你明确选中的模式执行。最容易被忽略的一点是:「结构-only」和「取消插入记录」这两个开关,一旦漏关,导出物就不再是纯结构,后续还原或比对时反而引入噪音。动手前花三秒确认那个单选框或复选框的状态,比事后排查错在哪快得多。











