首页 > 解决方案 > MySql插入多个并忽略重复记录

问题描述

我有这个 MySQL INSERT 查询,它将产品添加到多个类别:

INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 22);

这很好用,但是,如果我将相同的产品添加到同一父类的另一个子类别中,它将为父类别创建重复记录:

INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 23);

在此处输入图像描述

问题:忽略重复记录插入的适当 MySQL 查询是什么?换句话说,第二个查询应该只插入一条记录:1, 23.

我也尝试过 INSERT IGNORE INTO 但没有任何改变。

谢谢你!


标签: mysqlsqlduplicatessql-insert

解决方案


首先,您希望在类别/产品元组上创建唯一约束以避免重复:

alter table _categories_products  
    add constraint _categories_products _bk 
    unique (product_id, category_id);

从那时起,默认情况下,尝试在表中插入重复项会引发错误。您可以使用MySQLon duplicate key语法捕获和管理该错误:

insert into _categories_products (product_id, category_id) 
values (1, 14), (1, 8), (1, 1), (1, 23)
on duplicate key update product_id = values(product_id)

在重复的情况下,上述查询对 执行哑更新product_id,这实际上将插入变为无操作。


推荐阅读