【问题标题】:MySql Insert multiple and Ignore duplicate recordsMySql插入多个并忽略重复记录
【发布时间】:2020-05-19 17:37:51
【问题描述】:

我有这个 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 但没有任何改变。

谢谢!


【问题讨论】:

  • (product_id, category_id) 是唯一键吗?

标签: mysql sql duplicates sql-insert


【解决方案1】:

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

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

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

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 执行了一个哑更新,这实际上将插入变为无操作。

【讨论】:

  • INSERT IGNORE 也应该在您建议的情况下工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2018-04-26
  • 2010-10-23
  • 2012-08-11
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多