MySql 插入多条记录并忽略重复记录

Csa*_*aba 0 mysql sql duplicates sql-insert

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

INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 22);
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 23);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

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

谢谢你!


GMB*_*GMB 5

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

alter table _categories_products  
    add constraint _categories_products _bk 
    unique (product_id, category_id);
Run Code Online (Sandbox Code Playgroud)

从那时起,默认情况下,尝试在表中插入重复项将引发错误。您可以使用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)
Run Code Online (Sandbox Code Playgroud)

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