美文网首页数据库
MySQL - 重复数据清理

MySQL - 重复数据清理

作者: 灼灼2015 | 来源:发表于2018-03-28 12:18 被阅读7次

    事情:在按内容类型推荐功能上出现重复的数据

    需求:找出重复数据并删除

    难点:因两条数据一模一样,没有可区分的标识

    思路:需要有一个可区分的标识,然后找出重复数据,并根据这个标识的不同来删除。

    反思:为什么会存在重复的数据

          1: 应用层没有做校验,如数据已存在时要做的是update
    
          2: 数据库层没有做保障,如没有设置主键
    

    具体步骤:

    1. 创建一张临时表
    CREATE  TABLE IF NOT EXISTS EPG_CONTENT_BACK (LIKE EPG_CONTENT);
    
    1. 可临时表加个ID
    alter table EPG_CONTENT_BACK add id int
    
    1. 给ID 设置成主键
    alter table `EPG_CONTENT_BACK` change id id int not null auto_increment primary key;
    
    1. 获取所有字段
    desc EPG_CONTENT
    
    1. 将原表数据复制到 临时表
    insert into EPG_CONTENT_BACK(CONTENT_ID,CONTENT_CODE) select CONTENT_ID,CONTENT_CODE from EPG_CONTENT;  
    
    1. 找到重复的数据,验证是否正确
    select id,CONTENT_ID from EPG_CONTENT_BACK group by CONTENT_ID having count(*)>1 ORDER BY CONTENT_ID DESC;
    
    select * from EPG_CONTENT WHERE CONTENT_ID= ''
    
    1. 再创建临时表-把ID重复的写入临时表
    CREATE TABLE TEMP1 AS select id from EPG_CONTENT_BACK group by CONTENT_ID having count(*)>1 ORDER BY CONTENT_ID DESC;
    
    1. 根据临时表ID,删除临时数据表 EPG_CONTENT_BACK
    DELETE FROM EPG_CONTENT_BACK WHERE ID IN (SELECT ID FROM TEMP1)
    
    DROP TABLE TEMP1;
    

    循环6、7、8步,直到没有重复数据

    1. 将已清理好的数据,复制会员表
    DELETE FROM EPG_CONTENT;
    insert into EPG_CONTENT(CONTENT_ID,CONTENT_CODE) select CONTENT_ID,CONTENT_CODE,EXTERNAL_CODE from EPG_CONTENT_BACK;  
    

    相关文章

      网友评论

        本文标题:MySQL - 重复数据清理

        本文链接:https://www.haomeiwen.com/subject/rfuycftx.html