Navicat不支持批量导入多个.sql文件,只能逐个执行;真正批量执行需手动合并文件或用mysql命令行。合并时注意编码、依赖顺序、USE语句去重及外键检查开关;Navicat执行合并文件需调整设置:启用USE语句、关闭错误中断、修改分隔符、增大超时时间;超大文件推荐使用mysql命令行执行。
Navicat 里执行多个 .sql 文件,不能直接“批量导入”
navicat 的「运行 sql 文件」功能一次只支持选一个 .sql 文件。试图拖入多个文件、或用系统多选后点确定,它只会静默忽略除第一个外的所有文件——没报错,但数据只进了第一个脚本里的内容。
真正能“批量执行”的路径只有两条:手动合并文件,或用命令行驱动 MySQL/MariaDB 原生命令执行。
- 如果脚本之间**无依赖顺序**(比如全是
CREATE TABLE+INSERT独立表),合并最省事 - 如果存在外键、视图依赖、或需要严格按顺序建库→建表→插数据,则必须保证合并后的语句顺序,且建议在开头加
SET FOREIGN_KEY_CHECKS = 0;,末尾加SET FOREIGN_KEY_CHECKS = 1; - 注意不同脚本可能含重复的
USE database_name;,合并后保留第一个即可,其余删掉,否则可能切错库
用 cat 或 type 合并多个 .sql 文件(Linux/macOS/Windows)
终端合并比手动复制粘贴快,也避免编辑器编码问题(尤其是 Windows 记事本保存的 ANSI 文件,容易让 Navicat 执行时报 Unknown character set: 'utf8mb3' 类错误)。
- Linux/macOS:
cat file1.sql file2.sql file3.sql > merged.sql - Windows PowerShell:
Get-Content file1.sql, file2.sql, file3.sql | Set-Content merged.sql - Windows cmd(不推荐,易乱码):
copy /b file1.sql + file2.sql + file3.sql merged.sql - 合并前先确认所有文件是 UTF-8 编码(用 VS Code 或 Notepad++ 查看),Navicat 默认按 UTF-8 解析
.sql文件
Navicat 执行合并后的 merged.sql 时的关键设置
即使文件合并正确,Navicat 默认配置也可能导致执行中断或静默失败。
- 务必勾选「执行每个语句前先执行 USE 语句」——否则跨库脚本会报
Table 'xxx' doesn't exist - 取消勾选「遇到错误时停止执行」,否则一条
INSERT失败(如主键冲突),后面全跳过;改成「继续执行」更符合“合并导入”预期 - 如果脚本里有
DELIMITER $$定义存储过程,Navicat 需要识别分隔符:在「运行 SQL 文件」对话框里,把「SQL 分隔符」从默认的;改成$$(否则过程体被截断,报语法错误) - 大文件(>50MB)建议先在 Navicat 设置里调高「SQL 执行超时时间」,默认 60 秒很容易中断
替代方案:绕过 Navicat,用 mysql 命令行直接执行
当合并脚本超过 100MB,或 Navicat 卡死、内存溢出时,命令行更稳——它不走图形界面解析,纯流式读取执行。
- 基础命令:
mysql -u root -p -h 127.0.0.1 -P 3306 database_name - 若脚本含
CREATE DATABASE,先不指定库名,执行完再连进去:mysql -u root -p -h 127.0.0.1 -P 3306 - 遇到
ERROR 1044 (42000)权限不足?说明脚本里有CREATE USER或GRANT,需用高权限账号(如 root)执行 - Windows 上如果提示
'mysql' 不是内部或外部命令,需把 MySQL 的bin目录(如C:\Program Files\MySQL\MySQL Server 8.0\bin)加进系统PATH
最容易被忽略的是字符集隐式转换:多个来源的 .sql 文件如果混用 utf8 和 utf8mb4 声明,合并后可能触发 Incorrect string value 错误。动手前统一用 sed -i 's/CHARSET=utf8/CHARSET=utf8mb4/g'(Linux/macOS)或类似工具替换一遍更稳妥。











