Mysql Sequelize bulkCreate:updateOnDuplicate
我正在向数据库中输入大量数据,并使用此模型将updateOnDuplicate选项应用于bulkCreate。因此,我无法在这里验证是否正常。我的问题是,因为我使用了一个唯一的值,它也可以用于updateOnDuplicate条件,或者只是用于检查重复项的主键 问题是bulkCreate isMysql Sequelize bulkCreate:updateOnDuplicate,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我正在向数据库中输入大量数据,并使用此模型将updateOnDuplicate选项应用于bulkCreate。因此,我无法在这里验证是否正常。我的问题是,因为我使用了一个唯一的值,它也可以用于updateOnDuplicate条件,或者只是用于检查重复项的主键 问题是bulkCreate isid的表中的主键是自动递增的。我的模型中有多个唯一的值,不希望只检查主键就更新任何内容。它是否考虑了所有的Unique,还是我必须手动完成 customer_id: { type: Da
id
的表中的主键是自动递增的。我的模型中有多个唯一的值,不希望只检查主键就更新任何内容。它是否考虑了所有的Unique,还是我必须手动完成
customer_id: {
type: DataTypes.BIGINT,
allowNull: false,
unique: true
},
shop_id: {
type: DataTypes.INTEGER(10).UNSIGNED,
allowNull: false,
unique: true,
references: {
model: 'shop',
key: 'id'
}
},
email: {
type: DataTypes.STRING(255),
allowNull: false
},
others: {
type: DataTypes.STRING(255),
allowNull: false
},{
timestamps: false,
createdAt: false,
updatedAt: false,
tableName: 'customers'
}
根据我的观点,BulkCube只对ID起作用(不考虑唯一约束)。 所以,如果您试图使用bulkCreate插入重复的值(在具有唯一值约束的列中),那么它将抛出一个错误,并且不会插入任何记录。因此,在这种情况下,您必须手动执行该检查
因此,我建议首先检查唯一值,然后使用bulkCreate 或 循环记录并为每个记录调用findOrCreate
方法,并将唯一值列放入where条件中,如。这将需要更多的时间比创造,但更具体的一个
Model.findOrCreate({
where: {
customer_id: cust_val,
shop_id: shop_val
}
}).spread(function(record, created){
if (created){
console.log('New Record Created');
}
});
我实际上需要更新和创建这两者,这是选择bulkCreate的一个原因。但是让我试试这个