Navicat 15 不支持多表一键导出为多个独立 .sql 文件,仅能导出为单个文件;需改用 mysqldump 命令行(如 for 循环调用)或 SQL 查询手动拼接建表语句实现每表一文件。
navicat 15 不支持“选中多张表 → 一键导出为多个独立 .sql 文件”的图形界面功能;它默认只允许将多张表导出到单个 sql 文件,或逐张表手动右键导出。若你真正需要的是“每个表一个 .sql 文件”,必须绕过 gui,用命令行或脚本驱动。
Navicat 15 的“转储SQL文件”右键菜单实际行为
在对象列表中按住 Ctrl 多选表后右键 → “转储SQL文件…” → 选择“仅结构”,弹出的窗口里没有“每表一文件”选项。无论选多少张表,最终只生成一个文件(如 tables_dump.sql),所有 CREATE TABLE 语句拼在一起,中间无分隔标识。
- 勾选“仅结构”能避免
INSERT,但无法控制输出粒度 - 导出路径、编码、换行符可设,但不改变“单文件”本质
- 若目标是 Git 提交或 CI 拆分管理,这个单文件会极大降低可读性和 diff 效率
用 mysqldump 命令行替代(推荐)
Navicat 15 自带的命令行导出能力非常有限(navicat.exe -c "conn_name" dump table1 这类调用在 15 版本中已不稳定或被移除),而系统级 mysqldump 更可靠、参数更透明,且天然支持“每表一文件”:
for table in $(mysql -Nse "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mydb' AND TABLE_NAME IN ('t1','t2','t3')"); do
mysqldump -u user -p'pass' --no-data --skip-triggers --compact mydb "$table" > "./schema/$table.sql"
done
-
--no-data确保只导出结构(等价于 Navicat 的“仅结构”) -
--skip-triggers防止意外导出触发器(Navicat 默认不导出 trigger,但mysqldump会) -
--compact去掉注释和空行,让结果更接近 Navicat 导出风格 - 注意:Windows 用户需改用
FOR /F+mysql.exe组合,且密码不要明写在命令中
用 Navicat 内置 SQL 查询 + 手动拆分(适合少量表)
如果只能用 Navicat、不能接触命令行,可用 SQL 查询生成建表语句文本,再粘贴拆分:
在 Navicat SQL 编辑器中执行:
SELECT CONCAT('CREATE TABLE `', TABLE_NAME, '` (\n ', GROUP_CONCAT(
CONCAT('`', COLUMN_NAME, '` ', COLUMN_TYPE,
IF(IS_NULLABLE = 'NO', ' NOT NULL', ''),
IF(COLUMN_DEFAULT IS NOT NULL, CONCAT(' DEFAULT ', QUOTE(COLUMN_DEFAULT)), ''),
IF(COLUMN_COMMENT != '', CONCAT(' COMMENT ', QUOTE(COLUMN_COMMENT)), '')
) SEPARATOR ',\n '
), '\n) ENGINE=', ENGINE, ' CHARSET=', TABLE_COLLATION, ';')
FROM INFORMATION_SCHEMA.TABLES t
JOIN INFORMATION_SCHEMA.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
WHERE t.TABLE_SCHEMA = 'mydb' AND t.TABLE_NAME IN ('t1','t2')
GROUP BY t.TABLE_NAME, t.ENGINE, t.TABLE_COLLATION;
- 结果是一行一条
CREATE TABLE,每条独立可复制 - 缺点:不包含索引、外键、分区等完整 DDL,仅基础列定义
- Navicat 导出为 CSV/HTML 后仍需人工处理换行与引号,不适合自动化
真正要实现“每个表一个 .sql 文件”,Navicat 15 的 GUI 是瓶颈,不是配置问题。要么切到 mysqldump,要么用 Python 调用数据库驱动(如 pymysql)+ SHOW CREATE TABLE 循环生成——图形工具在这里只是入口,不是解决方案。


















