• ADADADADAD

    MySQL中删除重复记录[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:58:12

    作者:文/会员上传

    简介:

    工作中,我们经常有需要删除一些重复数据的这种需求。重复数据可能是程序bug造成的好,让我们看看如何删除这些重复数据删除重复数据的思路呢,是这样的,查看根据这个重复字段分组

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    工作中,我们经常有需要删除一些重复数据的这种需求。重复数据可能是程序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) 使用别名关联一下,这些数据就是重复的,最后要删除的
    select 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;

    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中删除重复记录.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载