Navicat 16 ER图不支持只显示主键/外键字段的过滤视图,字段显示仅可全展开或折叠;需通过“对象信息→列”页签导出后筛选,或执行INFORMATION_SCHEMA查询精准获取主键与外键列名。

ER 图里根本没法隐藏非主键/非外键字段
Navicat 的「查看 ER 图」功能本质是元数据可视化:它读取 INFORMATION_SCHEMA 中已存在的约束定义,生成表框和关系线。但字段层显示逻辑固定——要么全展开(显示所有列),要么只显示表名。没有「仅显示 PK/FK 列」的渲染选项,也没提供列级可见性配置。
常见误解是勾选「显示列名」后以为能进一步筛选,其实那只是把字段列表从折叠状态展开,所有字段照常列出,PK/FK 仅靠文字标注(如 id (PK)),无法自动高亮或过滤。
- ER 图不响应字段筛选操作,右键菜单里没有「隐藏普通字段」类选项
- 试图在 ER 图中双击表去编辑字段可见性,只会跳转到「设计表」界面,不影响图本身
- 导出为 PNG 或 PDF 后,仍是完整字段列表,无法后期裁剪约束字段
真正可行的替代方案:用「对象信息 → 列」页签 + 手动筛选
最接近“只看主键/外键”的实操路径,是在「对象信息」面板中操作:
- 右键目标表 → 「对象信息」→ 切换到「列」页签
- 全选所有列(
Ctrl+A)→ 复制(Ctrl+C)→ 粘贴到 Excel 或 VS Code - 在 Excel 中对「Key」列筛选值:
PK、MUL(MySQL 中外键常带索引,显示为 MUL)、或对「Extra」列筛选含auto_increment(主键常用)或空白(外键字段通常无 Extra) - 更可靠的是直接查
INFORMATION_SCHEMA.KEY_COLUMN_USAGE,例如:
SELECT COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'orders' AND (CONSTRAINT_NAME LIKE 'PRIMARY%' OR REFERENCED_TABLE_NAME IS NOT NULL);
这条语句返回的就是当前表所有主键列 + 所有被定义为外键的列(注意:不是被引用的列),结果可直接复制使用。
为什么不能依赖 Navicat 的字段图标来快速筛选?
Navicat 在「设计表」或「数据」页签左侧显示的 PK/FK 图标,视觉上确实直观,但它不具备筛选能力:
-
PK图标只出现在主键列,但复合主键(如(shop_id, order_no))可能只在第一个字段显示图标,第二个字段无标识 -
FK图标行为不一致:MySQL 表中一般标在子表字段上;PostgreSQL 表中常不显示,需切到「外键」页签才能确认 - 图标不可点击、不可排序、不可条件过滤——你只能肉眼扫,无法一键选中所有带 FK 的行
- 如果字段名含下划线或大小写混用(如
OrderID),图标位置可能偏移,误判风险上升


















