【发布时间】:2020-07-15 08:29:57
【问题描述】:
如何阻止在节点 MySQL 中为多对多关系插入重复记录?我有两个外键:id_product 和 id_customer,我想用主键 id_relation 在它们之间创建关系。此刻,我可以多次保存相同的产品和客户组合,每次创建新的 id_relation。有没有办法在将它保存到 MySQL 数据库之前先检查这种组合是否已经存在,或者有其他方法来防止重复相同的记录?
exports.create = (req, res) => {
const relation = {
id_product: req.body.id_product,
id_customer: req.body.id_customer
};
Relation.create(relation)
.then(data => {
res.send(data);
})
.catch(err => {
res.status(500).send({
message:
err.message || "Error"
});
});
}
module.exports = function(sequelize, DataTypes) {
return sequelize.define('relation', {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
unique: true
},
id_product: {
type: DataTypes.INTEGER(11),
allowNull: false,
references: {
model: 'product',
key: 'id'
},
onDelete: 'CASCADE'
},
id_customer: {
type: DataTypes.INTEGER(11),
allowNull: false,
references: {
model: 'customer',
key: 'id'
},
onDelete: 'CASCADE'
},
}, {
timestamps: false,
tableName: 'relation'
});
};
【问题讨论】:
-
你需要添加唯一键太列&插入记录时参考这个stackoverflow.com/questions/54866952/…
-
我刚刚添加了两者:产品和客户:unique: true,现在无法创建同一对产品和客户,显示错误。
-
现在使用 upsert 参考这个sequelize.org/master/class/lib/…
-
好的,我已经使用了“upsert”方法,现在可以了!谢谢!
标签: mysql node.js database many-to-many