代码只是创建新表并从csv文件添加数据。在创建标签表之前,它运行良好。
db.query("DROP TABLE if exists `wlb`.`users`, `wlb`.`library`,`wlb`.`tags`, `wlb`.`tag_instance`, `wlb`.`vote_library`, `wlb`.`vote_table`")
.then(()=>{return db.query(Users)}).then(()=>{return csv.parseCSV("users")})
.then(()=>{return db.query(Library)}).then(()=>{return csv.parseCSV("Library")})
.then(()=>{return db.query(Tags)}).then(()=>{return csv.parseCSV("tags")})
.then(()=>{return db.query(Tag_instance)}).then(()=>{return csv.parseCSV("Tag_instance")})
.then(()=>{return db.query(Vote_table)}).then(()=>{return csv.parseCSV("Vote_table")})
.then(()=>{return db.query(Vote_library)}).then(()=>{return csv.parseCSV("Vote_library")})
.catch((err)=>{console.log(err);
conn.db.end();});
Db.query如下:
var query=function(query,callback){
return new Promise(function(resolve,reject){
conn.db.query(query,function(error,result){
if(error){
return reject(new Error("Error occurred while making query"+error))
}
else{
console.log("Query Executed");
resolve(result);
}
})
});
}
Parse Csv function is as folows:
var parseCSV = (name) => {
return new Promise(function (resolve, reject) {
filePath = __dirname + `/../../Data/${name}.csv`;
fs.readFile(filePath, {
encoding: 'utf-8'
}, function (err, csvData) {
if (err) {
return reject(err);
}
csvParser(csvData, {
delimiter: ',',
cast: true
}, function (err, data) {
if (err) {
return reject(err);
} else {
var sql="INSERT INTO `wlb`."+`${name}`+ " VALUES ?";
data.splice(0,1);
console.log(data[0]);
conn.db.query(sql, [data], function(err) {
if (err){
return reject(err);
}
else {
console.log(`${name} Inserted `);
resolve();
}
})
}});
});
});
}
错误如下:
错误:ER_NO_REFERENCED_ROW_2:无法添加或更新子行:外键
约束失败(wlb
。tags
,约束iduser_fk2
外键(idusers
)
参考users
(idusers
)在更新级联时删除设置为空。
当我尝试显式尝试使用sql workbench加载csv文件时,它仍然可以工作,因此它一定不是导致它的引用约束。