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,否则这对我不起作用。