Node.js 能否在 mysql 操作里执行 source 语句?

我有一个 .sql 文件用来创建数据库,我手动在 mysql 命令行里执行 source sql文件 OK,但是在 Node.js 里就报错。Node.js 里连接 mysql 正常,其他查询也可以执行,但是这个 source 不行,我折腾不出来头绪。

database.sql

create database if not exists `note` default character set utf8mb4;
use `note`;
create table `users`(`id` int not null AUTO_INCREMENT, primary key(`id`), `uname` varchar(30) not null, `pwd` varchar(100) not null, `email` varchar(100) not null, `avatar` varchar(100) not null default "", `verify` char(6)) default charset = utf8mb4;
create table `notes`(`id` int not null AUTO_INCREMENT, primary key(`id`), `userid` int not null, `content` text not null, `tag` varchar(200), `time` varchar(14) not null) default charset = utf8mb4;

createDB.js

const path = require('path')
const MysqlPro = require('mysql-pro')
// const DBConfig = require('./DBConfig')
const DB = new MysqlPro({
  mysql: {
    host: 'localhost',
    port: 3306,
    database: 'mysql',
    user: 'root',
    password: 'root'
  }
})

const fileName = path.resolve(__dirname, 'database.sql')
DB.query(`source ${fileName}`)
  .then((res) => {
    console.log(res)
  })
  .catch((error) => {
    console.log(error)
  })

当我用 node createDB.js 执行时,报错语法错误:

code: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlMessage: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'source D:\\document\\vue\\note\\koa2\\database.sql\' at line 1',
  sqlState: '42000',
  index: 0,
  sql: 'source D:\\document\\vue\\note\\koa2\\database.sql'

我不知道怎么错了,而且最后这个 sql 语句 source D:\\document\\vue\\note\\koa2\\database.sql 我手动复制到 mysql 里可以正常执行, Node.js 里执行就报错了,求解 Orz

阅读 2.5k
1 个回答

参考这个issue
这里说的很清楚,source是MySQL的命令。不属于SQL规范。所以不能用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题