【发布时间】:2022-01-19 21:58:29
【问题描述】:
我目前是第一次在节点 js 中使用 .sql 文件,我有一个如下所示的 .sql 文件。我需要什么代码来执行文件中显示的查询中的一个查询,例如第一个 CREATE TABLE IF NOT EXISTS 命令?任何帮助将不胜感激!
我尝试了以下代码,但它没有正确返回所有代码行。它仍然解析 sql 文件的第一行。代码和输出如下所示。
代码:
function parseSqlFile() {
try {
const fileName = './youtube(35).sql'
var sqlData = fs.readFileSync(fileName).toString()
.replace(/(\r\n|\n|\r)(--[^.].*)/gm," ") // remove newlines
.replace(/\s+/g, ' ') // excess white space
.split(';') // split into all statements
.map(Function.prototype.call, String.prototype.trim)
.filter(function(el) {return el.length != 0});
console.log(sqlData)
return sqlData
} catch (err) {
console.log(err)
}
}
输出:
[
'-- MySQL Workbench Forward Engineering SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0',
'SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0',
"SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'",
'CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8',
'USE `mydb`',
'CREATE TABLE IF NOT EXISTS `mydb`.`videos` (`id` INT NOT NULL, `title` VARCHAR(100) NULL, `date` DATETIME NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB',
'CREATE TABLE IF NOT EXISTS `mydb`.`channels` (`id` INT NOT NULL, `channel_name` VARCHAR(45) NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB',
'SET SQL_MODE=@OLD_SQL_MODE',
'SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS',
'SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS'
]
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`foo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`foo` (
`id` INT NOT NULL,
`title` VARCHAR(100) NULL,
`date` DATETIME NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`foo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`foo` (
`id` INT NOT NULL,
`foo` VARCHAR(45) NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
【问题讨论】:
-
您在这里使用的是 MySQL 还是 MS SQL Server?
-
这里使用 MySQL
-
避免使用
IF NOT EXISTS,因为如果它已经存在,它就不会创建表,并且您最终可能会使用旧的过时表。 -
我会从文件阅读器开始,更多信息在这里javascript.info/file 然后考虑“;\n”是你的分割标识符来隔离 SQL 命令。最后可以使用查询方法w3schools.com/nodejs/nodejs_mysql_create_table.asp 执行您隔离的SQL 字符串命令最后编辑问题,更具体地说明您尝试了什么,遇到了什么麻烦。
-
尝试了什么,遇到了什么麻烦添加到问题中
标签: javascript mysql sql node.js