如何为多对多关系阻止在节点mysql中插入重复记录?

如何为多对多关系阻止在节点mysql中插入重复记录?,mysql,node.js,database,many-to-many,Mysql,Node.js,Database,Many To Many,如何为多对多关系阻止在节点MySQL中插入重复记录?我有两个外键:id_产品和id_客户,我想用主键id_关系在它们之间创建关系。现在,我可以多次保存产品和客户的相同组合,每次都可以创建新的id_关系。在保存到MySQL数据库之前,是否有一种方法检查第一个这样的组合已经存在,或者有另一种方法防止重复相同的记录 exports.create = (req, res) => { const relation = { id_product: req.body.id_product,

如何为多对多关系阻止在节点MySQL中插入重复记录?我有两个外键:id_产品和id_客户,我想用主键id_关系在它们之间创建关系。现在,我可以多次保存产品和客户的相同组合,每次都可以创建新的id_关系。在保存到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"
        });
    });
}


})

首先需要将唯一索引添加到表中,插入记录时请参考此

续集upsert方法文档

ALTER TABLE_name添加唯一索引(FirstName、lastName)

然后使用插入忽略以避免重复记录:

在表名称(产品标识、客户标识)值(1,2)、(1,2)中插入IGNORE

参考:


您可以创建MySQL过程,以确保只插入唯一的id\u客户和id\u产品对。代码将如下所示:

CREATE PROCEDURE `procedure_name`(IN relation INT,IN customer INT,IN product INT)
BEGIN
    IF 
        (SELECT ((SELECT customer "id_custoemr", product "id_product") NOT IN (SELECT id_customer, id_product FROM table_name)))
    THEN
        INSERT INTO `table_name` (id_relation, id_customer, id_product) VALUES (relation, customer, product);
    END IF;
END
call procedure_name(4,4,3);
在节点应用程序中,无需运行查询,只需使用以下正确参数调用过程:

CREATE PROCEDURE `procedure_name`(IN relation INT,IN customer INT,IN product INT)
BEGIN
    IF 
        (SELECT ((SELECT customer "id_custoemr", product "id_product") NOT IN (SELECT id_customer, id_product FROM table_name)))
    THEN
        INSERT INTO `table_name` (id_relation, id_customer, id_product) VALUES (relation, customer, product);
    END IF;
END
call procedure_name(4,4,3);

您也需要添加唯一密钥列&在插入记录时引用我刚才添加到的:product和customer:unique:true,现在无法创建相同的产品和客户对,显示错误。现在使用upsert引用此确定我使用了“upsert”方法,现在它是确定的!谢谢