navicat 15 不支持从 er 图反向生成建表语句,其“逆向工程”仅能从数据库生成 er 图;真正生成建表 sql 需通过模型编辑器完成 er 图后,右键选择“生成 sql 文件”或“同步到数据库”,且必须先手动添加表、设置外键连线并启用参照完整性。
navicat 15 不支持从 er 图「反向生成」数据库表结构——它只能做「逆向工程(reverse engineering)」,即从已有数据库读取元数据生成 er 图;而「正向工程(forward engineering)」才是从 er 图生成建表 sql。你当前想做的,其实是正向工程,不是逆向。
为什么点“逆向工程”菜单却导不出建表语句
菜单叫「逆向工程」,但实际功能是单向的:只读取数据库,不写入。当你在 Navicat 15 中点击「工具 → 逆向工程 → ER 图」,它只会连接数据库、查 information_schema、画图,不会生成任何 DDL。哪怕你右键数据库选「逆向数据库到模型」,结果也只是把表加载进模型编辑器,仍需手动触发导出操作。
- 真正能生成建表 SQL 的路径是:模型编辑器内完成 ER 图后 → 右键模型 → 「生成 SQL 文件」或「同步到数据库」
- 若模型里只有空画布、没表,「生成 SQL」按钮是灰色的——必须先通过「正向添加表」或「从数据库导入表」填充模型
- Navicat 15 的「逆向工程」入口名有误导性,它不处理「图→库」,只处理「库→图」
在 Navicat 15 中正确生成建表 SQL 的实操步骤
你要的是从逻辑设计落地为物理表,这属于正向工程流程。关键不是找“逆向”按钮,而是走通「模型→SQL」链路:
- 先新建一个空白模型:文件 → 新建模型 → 选择对应数据库类型(如 MySQL)
- 往模型里加表有两种方式:
– 手动创建:左上角「添加实体」→ 双击命名 → 添加字段
– 或导入已有结构:右键模型空白处 → 「从数据库导入表」→ 选中目标库和表(注意:这是从库读结构进模型,不是从图生库) - 确认外键关系已用连线工具连好(Navicat 15 不自动推断,必须手动拖线并双击设置参照完整性)
- 右键模型标签页 → 「生成 SQL 文件」→ 勾选「CREATE TABLE」、「FOREIGN KEY」等选项 → 保存为
.sql - 若勾选了「同步到数据库」,会直接执行建表语句——务必确认目标库为空或已备份,否则可能覆盖现有表
常见失败现象与对应检查点
生成的 SQL 缺外键、字段类型错成 UNKNOWN、或者同步时报错「Table doesn't exist」,基本都卡在这几个环节:
-
FOREIGN KEY没出现在 SQL 里?检查连线是否真的设置了参照完整性:双击连线 → 确认「Referential Integrity」已启用,且「On Delete / On Update」有值;仅画线不生效 - 字段类型显示
UNKNOWN?Navicat 15 对 MySQL 8.0+ 的JSON、TINYTEXT等类型识别不全,建议升级到 Navicat 16+,或手动在模型中把类型改成TEXT、VARCHAR(255)等兼容类型 - 同步时提示「Can't create table」?多数因引擎不一致:模型默认用 InnoDB,但目标库禁用了该引擎,或 SQL 文件开头没带
ENGINE=InnoDB;可在「生成 SQL 文件」对话框中勾选「包含存储引擎」 - 导出 SQL 后执行报错「Unknown character set: 'utf8mb4_0900_as_cs'」?这是 MySQL 8.0 默认排序规则,Navicat 15 不识别,需手动替换为
utf8mb4_general_ci
真正容易被忽略的点是:Navicat 15 的模型和数据库之间没有实时双向绑定。你改了模型里的表,不点「生成 SQL」或「同步」,数据库绝不会变;反过来,改了数据库结构,模型也不会自动更新。所有转换动作都得手动触发,且每一步都有明确的上下文依赖——比如「同步到数据库」前,必须确保模型里每个实体都已关联到目标数据库连接,否则它根本不知道往哪写。











