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 但没有任何改变。
谢谢你!
首先,您希望对类别/产品元组创建唯一约束以避免重复:
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,这实际上将插入变为无操作。