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

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

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

原文地址:https://www.cnblogs.com/nandi001/p/12895278.html