【思路】解决庞大的数据表中出现了少量的完全重复的数据的问题
当庞大的数据表里出现了少量的完全重复的数据时
思路:
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)