Sequelize.js:ER\u行被\u引用:无法删除或更新父行:外键约束失败
我的代码是:Sequelize.js:ER\u行被\u引用:无法删除或更新父行:外键约束失败,sequelize.js,Sequelize.js,我的代码是: DB.sequelize.query('SET FOREIGN_KEY_CHECKS = 0').complete(function(err) { if (err) { return done(err); } DB.sequelize.drop(); return DB.sequelize.sync().complete(function(err) { if (err) { return done(err); } }); })
DB.sequelize.query('SET FOREIGN_KEY_CHECKS = 0').complete(function(err) {
if (err) {
return done(err);
}
DB.sequelize.drop();
return DB.sequelize.sync().complete(function(err) {
if (err) {
return done(err);
}
});
});
我有一些外键约束,但我认为设置外键检查=0
会忽略这一点,让我放弃。相反,我得到的错误是:ER\u行被引用:无法删除或更新父行:外键约束失败
请尝试以下操作
DB
.sequelize
.query('SET FOREIGN_KEY_CHECKS = 0', null, {raw: true})
.success(function(results) {
DB.sequelize.sync({force: true});
});
sync的“force:true”选项将“DROP TABLE IF EXISTS”添加到create语句中,因此这应该可以实现您试图使用DROP()执行的操作
这个答案也值得考虑:.对于任何使用sequelize 3.15.x的人来说,他们都有,因此初始SQL语句之后的所有选项都包含在一个选项对象中。因此,答案如下:
DB
.sequelize
.query('SET FOREIGN_KEY_CHECKS = 0', {raw: true})
.then(function(results) {
DB.sequelize.sync({force: true});
});
更干净一点的方式:
constforcesync=async()=>{
wait db.sequelize.query('SET FOREIGN_KEY_CHECKS=0');
wait db.sequelize.sync({force:true});
wait db.sequelize.query('SET FOREIGN_KEY_CHECKS=1');//为安全性设置回标志
};
除非我在sequelize初始化对象中将pool设置为false,否则这对我不起作用。