zoukankan      html  css  js  c++  java
  • mysql删除表中重复值

    工作中遇到这么个需求,有个 EH 表没有唯一索引,当表中有一大堆数据后,又需要建个唯一索引,而这个表中还很多重复值,问我咋办?

    一句话形容就是:表中重复值太多,如何去重。

    举个白痴例子:

    1. 建表a: create table a(id int,name char(10));

    2. 插入数据:

    +------+------+
    | id | name |
    +------+------+
    | 1 | a |
    | 2 | a |
    | 3 | a |
    | 3 | a |
    | 3 | a |
    +------+------+

    3. 在id列上需要建唯一索引,如何去重?

    方法1:

    MySQL5.6及一下版本(看好,是低版本,5.5,5.6等)中,有个修改表结构的语法,语句如下:

    alter ignore table a add unique key uk_id(id);

    它的原理是:重建一张表,加上唯一索引,然后再往新建的表中导数据,遇到重复的列直接删除。

    原理很简单,用起来也很方便,缺点是容易造成主从数据不一致,难道还在使用古老的binlog_format。另外就是,原理毕竟是重建表,在对大表操作中,很容易造成长时间的锁表。

    不管什么原因,5.7之后这种语法就被直接抛弃了。

    方法2:

    根据方法1的原理,自己写个sql执行,岂不痛快。

    1. 建表加索引:create table b(id int primary key,name char(10)) ;

    2. 插入数据,有重复的replace:  replace into b select * from a;

    3. 重命名:drop table a; rename table b to a;

    OK

    还有很多其它去重方法,比如重复数据很少时,查出来,删除。

    不写了,写不下去了。。。

  • 相关阅读:
    随机数生成器
    赌博的艺术
    基本算法——包罗万象
    对于搜索的新理解
    关于动态规格的新理解
    发现的好东西——bitset
    高精度(重定义版)——来自
    ac自动机(模板)
    数据采集框架Gobblin简介
    Hadoop的数据采集框架
  • 原文地址:https://www.cnblogs.com/nandi001/p/12895278.html
Copyright © 2011-2022 走看看