ER图仅为设计视图,不能直接新建物理表;必须通过“同步到数据库”功能执行DDL建表,该操作为全量覆盖(DROP+CREATE),且需手动设置外键关系并确认权限与版本兼容性。
不能直接通过 er 图新建物理表,er 图只是设计视图;必须同步(sync)到数据库才能真正建表。
Navicat 的 ER 图本身不执行 DDL
很多人误以为在 ER 图里画完表、连好外键,点个“保存”就自动生成了数据库里的表——实际上不会。Navicat 的 ER 图(无论是通过 模型 → 新建模型 还是 逆向表到模型 生成的)本质是一个独立的设计文件(.nm),和实际数据库是分离的。它只描述逻辑结构,不触发任何 CREATE TABLE 语句。
常见错误现象:
– 在 ER 图里双击新建了 users 表并设好字段,刷新数据库列表却找不到这张表
– 导出为 PNG 后以为“图有了,表就建好了”
– 右键 ER 图空白处只有“导出为图片”,没有“生成表”选项
必须用“同步到数据库”功能落地建表
真正把 ER 图变成真实表的唯一可靠路径是 文件 → 同步已选择的模式(或右键模型 → 同步到数据库)。这个操作会比对当前模型与目标库的差异,生成并执行 SQL。
- 确保模型中所有表都已定义主键(否则同步时可能报错
Invalid primary key) - 目标数据库连接必须提前建立且可写(测试连接成功,用户有
CREATE权限) - 同步前建议勾选
仅创建不存在的对象,避免误删已有表(尤其生产环境) - 同步过程中会弹出 SQL 预览窗口,务必检查生成的
CREATE TABLE和ALTER TABLE ADD FOREIGN KEY是否符合预期
外键关系必须手动连线并设置参照完整性
ER 图里两个表之间光靠名字相似(比如 orders.user_id 和 users.id)不会自动识别外键。你得主动拖拽字段连线,并在弹出对话框里明确指定:
- 源字段(如
orders.user_id) - 目标字段(如
users.id) - 删除/更新规则(
CASCADE/RESTRICT等) - 是否启用该外键约束(默认勾选)
如果漏掉这一步,同步时只会建表,不会加 FOREIGN KEY 语句——后续查数据一致性时才发现关系断了。
同步失败的典型原因和绕过方式
同步常卡在权限或语法兼容性上:
-
ERROR 1064: You have an error in your SQL syntax:检查 Navicat 模型里选的数据库版本是否匹配目标库(比如模型设为 MySQL 5.7,但连的是 MySQL 8.0,某些关键字如JSON类型写法不同) -
Access denied for user 'xxx'@'%' to database 'xxx':确认连接用户有CREATE、REFERENCES权限,不是只读账号 - 想跳过外键同步?可在同步选项里取消勾选
Foreign Keys,但之后得手写ALTER TABLE ... ADD CONSTRAINT
最稳妥的做法:先同步建表(不含外键),再单独用 表设计 → 外键 → 添加 逐步补全,每步都能看到实时 SQL 预览。
ER 图不是魔法画布,它是设计草稿;真正让表落地的,永远是那一次点击“运行查询”的同步动作。别跳过预览,也别信自动推断——外键、字符集、存储引擎这些细节,Navicat 不会替你做决定。


















