结构同步导出的ddl才是可交付的活文档,因其完整保留字段注释、外键动作及定义顺序;单表ddl页签因缺失注释、简化外键、顺序随机,无法作为可靠文档使用。

直接用「结构同步」生成带注释的可执行 DDL,而不是右键单表复制 DDL——后者不带字段注释、外键细节缺失、顺序随机,根本没法当文档用。
为什么单表 DDL 页签不能当文档用
Navicat 16/17 的「查看表详情 → DDL」页签只是实时 SHOW CREATE TABLE 的渲染结果,它有三个硬伤:
- 字段注释(
COLUMN_COMMENT)默认不显示,哪怕表里写了COMMENT '用户昵称',DDL 里也完全消失 - 外键约束被简化:比如
ON DELETE CASCADE ON UPDATE NO ACTION可能只留FOREIGN KEY关键字,其余动作全丢 - 输出顺序不可控:同一张表在不同时间点导出,字段顺序、索引定义位置可能颠倒,导致 diff 工具误报“结构变更”
真正能交付的 DDL 文档必须含注释和完整语法
要让 DDL 成为跨团队可用的文档,必须从元数据源头重建语句。核心是用 SQL 查询 INFORMATION_SCHEMA.COLUMNS 和 INFORMATION_SCHEMA.KEY_COLUMN_USAGE,再拼装成带注释的建表语句。实操建议如下:
- 在 Navicat 新建查询,运行以下模板(替换
your_database_name):
SELECT CONCAT(
'CREATE TABLE `', c.TABLE_NAME, '` (\n',
GROUP_CONCAT(
CONCAT(' `', c.COLUMN_NAME, '` ', c.COLUMN_TYPE,
IF(c.IS_NULLABLE = 'NO', ' NOT NULL', ''),
IF(c.COLUMN_DEFAULT IS NOT NULL, CONCAT(' DEFAULT ', QUOTE(c.COLUMN_DEFAULT)), ''),
IF(c.COLUMN_COMMENT != '', CONCAT(' COMMENT ', QUOTE(c.COLUMN_COMMENT)), ''),
IF(k.CONSTRAINT_NAME IS NOT NULL AND k.REFERENCED_TABLE_NAME IS NOT NULL,
CONCAT(' REFERENCES `', k.REFERENCED_TABLE_NAME, '`(`', k.REFERENCED_COLUMN_NAME, '`)'),
''
)
) ORDER BY c.ORDINAL_POSITION SEPARATOR ',\n'
),
'\n) ENGINE=', t.ENGINE, ';'
) AS ddl
FROM INFORMATION_SCHEMA.COLUMNS c
JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE k
ON c.TABLE_SCHEMA = k.TABLE_SCHEMA
AND c.TABLE_NAME = k.TABLE_NAME
AND c.COLUMN_NAME = k.COLUMN_NAME
AND k.REFERENCED_TABLE_NAME IS NOT NULL
WHERE c.TABLE_SCHEMA = 'your_database_name'
GROUP BY c.TABLE_NAME, t.ENGINE;
- 导出时选「导出当前结果」→ Excel(.xlsx),保留换行和缩进;若需 Word/PDF,先粘贴到支持 Markdown 的编辑器(如 Typora),再转出
- 注意:该 SQL 不生成主键/索引的独立语句,仅内联在字段定义中;如需完整 DDL(含
PRIMARY KEY单独行),需额外关联INFORMATION_SCHEMA.STATISTICS
结构同步导出才是给开发团队看的“活文档”
当需要向开发、测试、运维同步最新结构时,别发一堆 SQL 文件——直接用 Navicat 的「工具 → 结构同步」,但关键在于设置:
- 源库选开发环境,目标库选空数据库(或新建 schema),勾选
Compare structure only - 「选项 → Compare Options」中必须关闭:
Ignore column comment(否则注释全丢)、Ignore TEXT/BLOB column attributes(否则TINYTEXT NOT NULL被当成无约束) - 比对完成后,点击结果窗口右上角
Export图标 → 导出 HTML,这份报告会清晰列出每张表的字段增删、类型变更、注释差异,并附带可执行的ALTER TABLE语句 - HTML 报告里中文不乱码?提前在
Tools → Options → Environment → Default encoding设为UTF-8
最易被忽略的一点:DDL 文档的价值不在“生成”,而在“可验证”。导出后务必用一个空库执行一遍,确认没有语法错误、外键引用存在、注释写入成功——很多团队卡在这步,结果文档写着 COMMENT '订单状态',实际建表后查 SHOW FULL COLUMNS 却为空。











