mysql - 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 但没有任何改变。
谢谢你!
解决方案
首先,您希望在类别/产品元组上创建唯一约束以避免重复:
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
,这实际上将插入变为无操作。
推荐阅读
- python - Mypy 不使用 Type[NamedTuple] 进行类型检查功能
- sql - SQL 合并不返回任何行
- sql-server - 在 SSIS 包中面临登录超时问题
- javascript - .babelrc 配置放在 package.JSON
- python - matplotlib 额外的空图
- css - CSS 工具提示 - 以特定宽度换行
- angular - 如何将多个数据从对象传递到一个 p 列 PrimeNG
- testing - TFS 测试结果详细报告不符合 SoapUI 项目结构
- apache-flink - 将事件从 Apache Flink 传输到 Apache NiFi - 性能不佳
- android - 从 Webview 收集数据