mysql之重复记录查询及去重

本文介绍了在高并发场景下,如何处理MySQL数据库中的重复记录问题。首先讲解了如何查找具有重复字段的记录,如单一字段重复和多个字段重复的情况。接着详细阐述了正确删除重复记录的方法,包括解决在更新时遇到的错误提示。最后,建议在明确业务需求时,可以通过建立唯一索引来避免数据重复。
摘要由CSDN通过智能技术生成
0. 前言

在实际的数据库设计过程中,很少通过索引组合键唯一索引来保证数据唯一性。很多是通过代码逻辑(先查询再插入)去保证唯一性,这个在并发很少的情况下是没有问题的,一般用在配置类的数据库表。不过在一些并发高的场景下,就会出现多线程问题,因为先查询再插入并非原子操作,另外当程序出错情况也会导致在数据库里存在重复记录。这个时候程序员就会被叫来背锅,首要的当然是处理掉已产生的重复数据保证业务正常运行,再排查问题原因。本文主要以mysql为例记录如何处理重复记录。

1. 查找重复记录
select * from 表 where 重复字段 in (select 重复字段 from 表 group by 
重复字段 having count(*)>1)

一个重复字段,以商家表中的qq重复字段处理为例:

select * from owner where qq in (select qq from owner group by qq
 having count(*) > 1)

多个重复字段,以商品的sku表中商品id、商品sku_code两个重复字段处理为例:

select * from sku where (product_id,sku_code) in (select product_id ,
 sku_code from sku group by product_id, sku_code having count(*) > 1)
2. 删除重复记录

网上很多版本:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值