在sql中我们经常会碰到有重复的一些数据,下面我来介绍在mysql中删除重复记录的多种方法,有需要的朋友可参考参考。
删除重复记录方法一:
1. 新建一个临时表
| 代码如下 | 复制代码 |
|
create table tmp as select * from youtable group by name(name为不希望有重复的列) |
|
2. 删除原来的表
| 代码如下 | 复制代码 |
|
drop table youtable |
|
3. 重命名表
| 代码如下 | 复制代码 |
|
alter table tmp rename youtable |
|
但是这个方法有个问题,由临时表转变过来的最终表,其表结构会和原来的不一致,需要手工更改。这个问题,待解决。
删除重复记录方法二:
1. 新建一个临时表
| 代码如下 | 复制代码 |
|
CREATE TABLE tmp AS SELECT * FROM youtable GROUP BY name(name为不希望有重复的列) |
|
2. 清空原来的表
| 代码如下 | 复制代码 |
|
TRUNCATE TABLE youtable |
|
3. 把临时表插入到youtable
| 代码如下 | 复制代码 |
|
INSERT INTO tablename SELECT * FROM temp |
|
4. 删除临时表
| 代码如下 | 复制代码 |
|
DROP TABLE temp |
|
删除重复记录方法三:
| 代码如下 | 复制代码 |
|
delete table where ID not in(select min(ID) from table group by name(name:重复的字段)) |
|
删除重复记录方法四:
具体实现如下:
| 代码如下 | 复制代码 |
|
Table Create Table users_groups.txt内容: 1,11,502 mysql> load data infile 'c:\users_groups.txt' into table users_groups fields mysql> select * from users_groups; query result(14 records) id uid gid |
|
根据一位兄弟的建议修改。
| 代码如下 | 复制代码 |
|
mysql> create temporary table tmp_wrap select * from users_groups group by uid having count(1) >= 1; mysql> truncate table users_groups; mysql> insert into users_groups select * from tmp_wrap; mysql> select * from users_groups; query result(7 records)
|
|
2、还有一个很精简的办法。
查找重复的,并且除掉最小的那个。
| 代码如下 | 复制代码 |
|
delete users_groups as a from users_groups as a, |
|
3、现在来看一下这两个办法的效率。
运行一下以下SQL 语句
| 代码如下 | 复制代码 |
|
create index f_uid on users_groups(uid); |
|
很明显的第二个比第一个扫描的函数要少。
当没有创建表或创建索引权限的时候
创建一个新表,然后将原表中不重复的数据插入新表:
| 代码如下 | 复制代码 |
|
mysql> create table demo_new as select * from demo group by site; |
|
然后将原表备份,将新表重命名为当前表:
| 代码如下 | 复制代码 |
|
mysql> rename table demo to demo_old, demo_new to demo; |
|
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号