MySQL中删除重复记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中删除重复记录相关的知识,希望对你有一定的参考价值。

工作中,我们经常有需要删除一些重复数据的这种需求。重复数据可能是程序bug造成的

好,让我们看看如何删除这些重复数据

删除重复数据的思路呢,是这样的,查看根据这个重复字段分组后的结果有没有大于1的情况
如果有大于的1的情况呢,那就说明是有重复数据的!

1) 创建数据库

create database ceshi;

2) 创建表

CREATE TABLE t1 (
   id int(10) unsigned NOT NULL AUTO_INCREMENT,
   name varchar(20) not null,
   createdAt timestamp NOT NULL DEFAULT current_timestamp(),
   updatedAt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

3) 插入数据
insert into t1 values(null,‘haha‘,now(),now()),(null,‘haha‘,now(),now()),(null,‘xixi‘,now(),now()),(null,‘heihei‘,now(),now()),(null,‘hoho‘,now(),now()),(null,‘hoho‘,now(),now()),(null,‘sasa‘,now(),now()),(null,‘haha‘,now(),now()),(null,‘sasa‘,now(),now()),(null,‘xixi‘,now(),now());

4) 查看数据
select * from t1;

技术图片

5) 根据最小id,重复字段name分组,假设我们的需求就是最后要保留第最小id的这些数据,把其它重复的删除
select min(id),name from t1 group by name having count(name)>1 order by id;
技术图片

6) 使用别名关联一下,这些数据就是重复的,最后要删除的

技术图片

7) 记得先备份一下数据
create table bak_t1_20190621 like t1;

insert into bak_t1_20190621 select * from t1;

8) 删除数据
delete a from t1 a,(select min(id) from t1 group by name having count(name)>1)as b where a.name=b.name and a.id>b.id;

9) 最后检查一下,确实已经没有重复数据了

技术图片

以上是关于MySQL中删除重复记录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中删除多余的重复记录

MySQL中删除重复记录

MYSQL删除重复记录

MySQL查询删除重复记录

MySQL删除重复记录只保留一条

MySQL中查询删除重复记录的方法大全