如何使用NodeJS将.sql文件中的SQL语句执行到MySQL数据库
解决方案:使用MySQL官方Node.js驱动(mysql2)执行脚本
SQLite是独立的文件型数据库,和MySQL完全不兼容,所以必须改用MySQL专属的Node.js驱动,推荐用mysql2(性能更好、原生支持Promise)。
步骤1:安装依赖
npm install mysql2
步骤2:编写执行脚本的代码
创建run-migrate.js文件,内容如下:
const fs = require('fs'); const mysql = require('mysql2/promise'); async function executeSqlScript() { // 读取SQL文件内容 const sqlContent = fs.readFileSync('./generated-script.sql', 'utf8'); // 拆分SQL语句:过滤空行、注释,按分号分割 const sqlStatements = sqlContent .split(';') .map(line => line.trim()) .filter(line => line && !line.startsWith('--')); // 建立数据库连接(替换为你的数据库账号信息) const connection = await mysql.createConnection({ host: 'localhost', user: 'root', password: 'your_db_password', }); try { // 逐个执行SQL语句 for (const stmt of sqlStatements) { await connection.execute(stmt); console.log(`执行成功:${stmt.length > 60 ? stmt.slice(0, 60) + '...' : stmt}`); } console.log('\n✅ 所有SQL脚本执行完成!'); } catch (err) { console.error('\n❌ 执行出错:', err.message); } finally { // 关闭数据库连接 await connection.end(); } } executeSqlScript();
步骤3:运行脚本
node run-migrate.js
关键说明
- 脚本中的
USE db_test;会自动切换到目标数据库,因此连接时无需指定数据库名称 - 当前拆分逻辑针对你的DDL脚本足够适用,若后续有包含分号的字符串数据,可调整拆分规则(比如用正则匹配完整语句)
- 确保数据库用户拥有
CREATE SCHEMA、CREATE TABLE等操作权限
内容的提问来源于stack exchange,提问作者omar
相关产品推荐
相关产品推荐

