我正在尝试使用以下Sequelize模型创建两个表:
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);
});