navicat er图默认不显示行数,需手动刷新模型统计信息并勾选“行数”列;若仍为0或“-”,多因权限不足、引擎限制或只读实例导致。
navicat er图里不显示行数?先确认是否启用了统计信息收集
navicat 的 er 图默认不会自动显示每张表的行数(即 rows 列),除非你主动刷新了模型的统计信息。这个数值不是实时查询数据库获取的,而是基于上次刷新时执行的 select count(*) 或系统表估算结果缓存下来的。如果你右键表 →「编辑表」能看到行数,但在 er 图里为空,大概率是模型没刷新过统计。
怎么手动刷新模型统计信息(关键操作)
必须在「模型」视图下操作,不是在连接或查询窗口里——这是最容易卡住的地方。
- 打开你的 .mmodel 文件(即 Navicat Data Modeler 创建的模型)
- 在左侧「模型对象」面板中,右键点击根节点(通常是模型名,比如
my_project) - 选择「刷新统计信息」→ 弹出对话框后勾选「包括视图」(按需)、保持「超时时间」默认(30秒够用)
- 点击「确定」,等待完成(小圆圈转完,状态栏提示“刷新完成”)
- 回到 ER 图,右键空白处 →「显示/隐藏列」→ 勾选「行数」,此时数字才会出现
为什么刷新后还是显示 0 或「-」?常见原因
不是所有场景都能成功获取行数,尤其当权限、引擎或配置受限时:
- 当前数据库用户没有
SELECT权限或无法访问information_schema.TABLES(MySQL)或pg_class(PostgreSQL) - 表使用了
MyISAM引擎(MySQL)通常能快速返回准确值;InnoDB默认只返回估算值(来自TABLE_ROWS字段),且可能为NULL或0 - 连接的是只读副本(如 AWS RDS 只读实例),部分系统表不可查,Navicat 会跳过该表统计
- 模型里包含外部数据库链接的表(如 ODBC 导入),Navicat 不支持对其刷新统计
替代方案:不依赖模型,直接查系统表补数字
如果刷新始终失败,又确实需要在 ER 图里看到近似行数,可以手动填一个估算值(仅用于可视化参考):
- 对 MySQL:执行
SELECT table_name, table_rows FROM information_schema.TABLES WHERE table_schema = 'your_db'; - 对 PostgreSQL:执行
SELECT schemaname, tablename, n_tup_ins - n_tup_del AS rows FROM pg_stat_all_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema'); - 复制结果,在模型中双击对应表 →「属性」面板 → 找到「注释」或自定义字段(如支持)→ 手动写入,例如:
[rows: 12480]
注意:ER 图本身不解析注释内容,但你可以靠这个习惯性标注快速识别规模。真正要参与建模分析,还是得确保「刷新统计信息」路径走通——它影响的不只是行数,还有字段类型精度、主外键推断等底层元数据质量。











