Navicat 不支持从 UML/ER 图或 JSON/YAML 模型文件直接建表,必须先将模型导出为 DDL SQL 脚本(如通过 PowerDesigner 或 dbdiagram.io),再在 Navicat 中执行该脚本;执行前需确保语句以分号结尾、不包含 USE 语句,并推荐“运行所选内容”以避免单错中断全局。
Navicat 里没有真正的“模型驱动建表”功能
navicat 本身不支持从 uml 类图、er 图或 json/yaml 模型文件直接生成数据表。所谓“根据模型批量建表”,实际是借助它的 sql 文件导入 或 数据库迁移 功能,把已写好的建表语句(即模型的 sql 表达)一次性执行。如果你手头只有图形化模型(比如 draw.io 或 powerdesigner 导出的 png),得先转成 ddl 才能用。
怎么把设计模型变成可执行的 SQL 建表语句
关键不是 Navicat 做什么,而是你提前准备好什么。常见路径有:
- 用 PowerDesigner / ER/Studio 等工具导出
DDL脚本(选择目标数据库类型,如 MySQL 8.0),保存为.sql文件 - 用开源工具如
dbdiagram.io画完表结构后,点「Export SQL」复制内容到文本文件 - 手写 DDL 时注意:每个
CREATE TABLE语句末尾必须加分号;,Navicat 的批量执行依赖这个分隔符 - 避免在 SQL 文件里混入
USE database_name;—— Navicat 执行前需手动选中目标数据库,否则会报错Unknown database
在 Navicat 中安全批量执行建表 SQL
别直接点“运行”——容易因单个语法错误导致后续全部中断。推荐分步操作:
- 打开 Navicat,连接目标数据库,右键数据库名 →
新建查询 - 把整理好的 SQL 内容粘贴进去,先点击
格式化(Ctrl+Shift+F)看是否识别出多条语句 - 勾选菜单栏
查询→运行所选内容(不是“运行全部”),这样即使某张表建失败,前面成功的不会回滚,便于定位问题 - 留意结果面板里的错误行号,典型问题包括:
Cannot add or update a child row: a foreign key constraint fails(外键引用的表还没建)、Identifier name 'xxx' is too long(MySQL 5.7 默认索引名长度限制 64 字符)
批量建表后验证和收尾建议
建完不等于可用。尤其字段类型和约束容易被忽略:
- 检查
CHAR和VARCHAR是否统一用了utf8mb4排序规则(Navicat 新建连接默认可能还是utf8,存 emoji 会丢) - 确认
auto_increment字段是否都设了起始值(比如AUTO_INCREMENT=1000),避免上线后主键冲突 - 如果模型含注释(
COMMENT '用户昵称'),Navicat 查询窗口执行后不会自动显示在表结构界面,需右键表 →设计表手动补上,否则导出文档时缺失
真正麻烦的从来不是点几下鼠标,而是模型定义和目标数据库版本之间的隐式差异——比如 PostgreSQL 的 JSONB 类型在 MySQL 里得换成 JSON,这种转换没法靠 Navicat 自动完成。


















