【思路】解决庞大的数据表中出现了少量的完全重复的数据的问题

当庞大的数据表里出现了少量的完全重复的数据时

思路:
1、暂停运营中的项目;
2、修改表结构:临时新增字段,并设置为主键、自增长;
3、修改数据:查出重复的数据,根据实际情况纠正过来;
4、最后再删除临时新增的字段,并重新设置主键,理论上整个过程对项目没有实质性的影响,还把问题解决了,仅供参考

mysql> select * from aa;

id name pwd
2 刘备 123456
2 刘备 123456
3 guanyu 123456
4 lvbu 123456

4 rows in set (0.00 sec)

mysql> select id,count(*) as "重复次数" from aa group by id;

id 重复次数
2 2
3 1
4 1

3 rows in set (0.00 sec)

# 给 aa 表新增 sid 字段,并设置为主键、自增长
mysql> alter table aa add sid int auto_increment, add primary key(sid);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
# 看效果
mysql> select * from aa;
id name pwd sid
2 刘备 123456 1
2 刘备 123456 2
3 guanyu 123456 3
4 lvbu 123456 4



4 rows in set (0.00 sec)

# 根据实际情况纠正重复的数据
mysql> update aa set id=1,name="张飞" where sid=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select id,name,count(id) as "重复次数" from aa group by id;

id name 重复次数
1 张飞 1
2 刘备 1
3 guanyu 1
4 lvbu 1

4 rows in set (0.00 sec)

# 先备份数据表防止删除错了,删除 sid 临时字段
mysql> alter table aa drop sid;
Query OK, 4 rows affected (0.09 sec)
Records: 4  Duplicates: 0  Warnings: 0
# 看最后效果
mysql> select * from aa;
id name pwd
1 张飞 123456
2 刘备 123456
3 guanyu 123456
4 lvbu 123456


4 rows in set (0.00 sec)

最后删除 sid 字段即可,把主键设置给 id 字段,切记设置主键字段禁止重复,到这问题基本解决了
posted @ 2022-03-14 12:22  TabKey9  阅读(90)  评论(0编辑  收藏  举报