Navicat 17模型不支持批量重命名表名前缀/后缀,仅能单表手动修改显示名,且不同步数据库实际对象;必须先在数据库层用SQL批量执行RENAME TABLE等操作,再手动刷新模型。

Navicat 17模型中不支持直接批量重命名表名前缀/后缀
Navicat 17 的「模型」窗口(.nm 文件)里没有内置的“批量重命名表名”功能,右键菜单、工具栏或搜索面板均无 Rename All、Prefix Replace 等选项。你看到的「重命名」操作只能单张表右键 → 「重命名」,且仅修改模型内显示名,不会同步更新数据库实际对象名或元数据。
想统一改 tbl_user → core_user 或 user → user_v2,必须绕过图形界面,用 SQL 批量操作数据库本身,再刷新模型索引。
- 模型里的表名只是对数据库对象的引用快照,不是独立实体;改模型名 ≠ 改数据库表名
- 若只在模型里手动改名,导出 SQL 时仍会生成原始表名语句(如
CREATE TABLE tbl_user),导致迁移失败 - Navicat 不监听 DDL 变更自动刷新模型,执行
RENAME TABLE后需手动右键模型 → 「刷新」或重新导入
真正可行的批量重命名路径:先改库,再同步模型
核心逻辑是:数据库才是唯一可信源,Navicat 模型只是视图。批量操作必须落在数据库层,靠标准 SQL 或命令行完成。
- MySQL:用
RENAME TABLE+ 动态拼接(推荐在 Navicat 查询窗口执行)SELECT CONCAT('RENAME TABLE ', table_name, ' TO core_', SUBSTRING(table_name, 5), ';') FROM information_schema.tables WHERE table_schema = 'your_db' AND table_name LIKE 'tbl_%';复制结果,粘贴执行 - PostgreSQL:用
ALTER TABLE ... RENAME TO,配合pg_tables查询生成语句,注意双引号和大小写 - 执行完所有
RENAME后,回到模型窗口 → 右键空白处 → 「刷新」→ 等待索引重建完成(底部状态栏提示“已加载 X 张表”) - 刷新后若仍有旧名残留,说明某张表未被当前 schema 权限覆盖,检查连接用户是否对目标 schema 有 USAGE + SELECT 权限
为什么不能用模型搜索+替换?
模型的 Ctrl+Shift+F 是只读过滤器,不是编辑器。它能高亮匹配 tbl_% 的表,但无法选中并批量执行重命名动作——这跟 Excel 查找后按 Ctrl+H 替换文本是两回事。
- 输入
tbl_%可定位到所有匹配表,但右键菜单里只有「打开」「属性」「删除」,没有「重命名所选」 - 即使全选多张表(Ctrl+A),右键依然只有单表操作项,Navicat 不提供批量文本处理能力
- 试图在「对象信息」里逐个改
Comment或字段别名,对表名本身无效
导出前临时修正前缀的替代方案(仅限SQL文件)
如果只是导出 SQL 用于部署到新环境(比如把 dev_ 全换成 prod_),可跳过模型,直接导出后文本处理:
- 用 Navicat 「转储 SQL 文件」导出结构(不含数据),保存为
dump.sql - 用 VS Code 打开,启用正则替换:
\bdev_([a-zA-Z0-9_]+)\b→prod_$1
注意排除注释和字符串字面量(加(?


















