Sequelize – Mysql的外键添加约束失败与ALTER TABLE

我试图用下面的Sequelize模型创build两个表:

const Sequelize = require('sequelize'); module.exports = function (db) { const Product = db.define('product', { intProductID: { type: Sequelize.INTEGER(11), primaryKey: true, autoIncrement: true, allowNull: false }, strName: { type: Sequelize.STRING }, douPrice: { type: Sequelize.DOUBLE } }); return Product; } const Sequelize = require('sequelize'); module.exports = function(db){ const User = db.define('user', { intUserID:{ type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false }, strEmail:{ type:Sequelize.STRING }, strPassword:{ type:Sequelize.STRING }, strFirstName: { type: Sequelize.STRING }, strLastName: { type: Sequelize.STRING } }); return User; } 

添加这两个模型后,我尝试将它们与以下代码关联:

 Product.belongsTo( User, { foreignKey: { name: 'intCreateUserID', allowNull: false }, foreignKeyConstraint: true } ); 

第一次发生这种情况,效果很好。 但一次之后,它会尝试添加约束几次。 我不断收到以下错误:

 SequelizeDatabaseError: Can't create table 'shop.#sql-4d23_2563b' (errno: 121) code: 'ER_CANT_CREATE_TABLE', errno: 1005, sqlState: '#HY000', sql: 'ALTER TABLE `products` ADD CONSTRAINT `products_intUpdateUserID_foreign_idx` FOREIGN KEY (`intUpdateUserID`) REFERENCES `users` (`intUserID`) ON DELETE NO ACTION ON UPDATE CASCADE;' 

我试图重现mysql控制台上的错误,并复制粘贴查询。 我注意到它因为现有的外键而失败。 它试图重新添加约束,而不是先删除它。 这是一个Sequelize的错误还是我的模型的定义是错误的?

我正在使用以下代码同步表格:

 init.db.sync({ alter: true }).then(() => { proceed(); }, (error) => { console.log(error); });