资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

mysql怎么去掉重复 mysql查询重复数据保留一条

mysql数据库中怎么删除重复的数据

不建议直接删除,养成良好的习惯(删除更麻烦),以下是将去重后的数据转移到另一张表代码:

创新互联公司主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、成都响应式网站建设、程序开发、网站优化、微网站、微信小程序定制开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的成都网站建设、成都网站设计、网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体。

Insert into 表名(列名)select distinct 列名 from 表名

你可以按照去重的思路,删除重复数据

mysql怎么删除表中的重复的数据

通常情况下,一个我们在做一个产品的时候,一开始可能由于设计考虑不周或者程序写的不够严谨,某个字段上的值产生重复了,但是又必须去掉,这个时候就稍微麻烦了一点,直接加一个 UNIQUE KEY 肯定是不行了,因为会报错。

现在,我们来采用一种变通的办法,不过可能会丢失一些数据 :)

在这里,我们设定一个表,其结构如下:

mysql desc `user`;

+-------+------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| name | char(10) | NO | | | |

| extra | char(10) | NO | | | |

+-------+------------------+------+-----+---------+----------------+

原来表中的数据假定有以下几条:

mysql SELECT * FROM `user`;

+----+-------+--------+

| id | name | extra |

+----+-------+--------+

| 1 | user1 | user1 |

| 2 | user2 | user2 |

| 3 | user3 | user3 |

| 4 | user4 | user4 |

| 5 | user5 | user5 |

| 6 | user3 | user6 |

| 7 | user6 | user7 |

| 8 | user2 | user8 |

| 9 | USER2 | user9 |

| 10 | USER6 | user10 |

+----+-------+--------+

1、将原来的数据导出

mysqlSELECT * INTO OUTFILE '/tmp/user.txt' FROM `user`;

2、清空数据表

mysqlTRUNCATE TABLE `user`;

3、创建唯一索引,并且修改 `name` 字段的类型为 BINARY CHAR 区分大小写

mysql ALTER TABLE `user` MODIFY `name` CHAR(10) BINARY NOT NULL DEFAULT '';

mysql ALTER TABLE `user` ADD UNIQUE KEY ( `name` );

现在来看看新的表结构:

mysql desc user;

+-------+------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| name | char(10) | NO | UNI | | |

| extra | char(10) | NO | | | |

+-------+------------------+------+-----+---------+----------------+

4、把数据导回去,在这里,有两种选择:新的重复记录替换旧的记录,只保留最新的记录 或者是 新的记录略过,只保留最旧的记录

mysql LOAD DATA INFILE '/tmp/user.txt' REPLACE INTO TABLE `user`;

Query OK, 10 rows affected (0.00 sec)

Records: 8 Deleted: 2 Skipped: 0 Warnings: 0

mysql SELECT * FROM USER;

+----+-------+--------+

| id | name | extra |

+----+-------+--------+

| 1 | user1 | user1 |

| 8 | user2 | user8 |

| 6 | user3 | user6 |

| 4 | user4 | user4 |

| 5 | user5 | user5 |

| 7 | user6 | user7 |

| 9 | USER2 | user9 |

| 10 | USER6 | user10 |

+----+-------+--------+

上面是采用 REPLACE 的方式,可以看到,导入过程中删掉了两条数据,结果验证确实是 新的重复记录替换旧的记录,只保留最新的记录。

现在,来看看用 IGNORE 的方式:

mysql LOAD DATA INFILE '/tmp/user.txt' IGNORE INTO TABLE `user`;

Query OK, 6 rows affected (0.01 sec)

Records: 8 Deleted: 0 Skipped: 2 Warnings: 0

mysql SELECT * FROM USER;

+----+-------+--------+

| id | name | extra |

+----+-------+--------+

| 1 | user1 | user1 |

| 2 | user2 | user2 |

| 3 | user3 | user3 |

| 4 | user4 | user4 |

| 5 | user5 | user5 |

| 7 | user6 | user7 |

| 9 | USER2 | user9 |

| 10 | USER6 | user10 |

+----+-------+--------+

看到了吧,确实是 新的记录略过,只保留最旧的记录。

mysql数据库删除重复数据

直接拿1楼的来改吧,

delete from zhszty_ebook

where id not in(

select * from (select max(id) from zhszty_ebook group by url

) as tmp);------------mysql有个特性,对于表进行修改,删除操作,子查询不能和外层的查询的表一样,所以在加个select就可以了。其他数据库按照楼上的那个是没问题的

mysql删除重复数据,保留一条

mysql数据表中有多条重复数据记录,现在想删除删除部分重复数据,保留最后一条更新或者插入的数据。

以学生表为例,我们创建一个简单的数据表来做实验:

往表里面插入一些实验数据:

我们可以根据分组查询先将重复数据查询出来,同时也可以获取到最后的更新时间,然后再与原表联表查询小于最大时间的数据,将查询出来的数据删除。

------先来慢慢消化-------

在做删除前,我们可以先看看有哪些数据是有重复的:

可以看到张三,李四,王五的数据是有重复的,赵六没有重复,下面我们查找最后更新的记录。

可以看到,最后更新的数据为15:57:46的记录没有在结果中。

可以看到重复记录已经被清理掉。

假如有两行记录是完全一样的,这个方法就不可行了,往表里面在跑一次数据插入:

执行删除计划:

创建一个临时表存放最后插入的一条数据(包含重复与没有重复的),然后清空原表,再将临时表的数据复制到原表中,最后把临时表删除。

这个很好理解,相当于ctrl+c,ctrl+v的操作,数据表如下:

这样数据去重就完成了,需要注意的是, 如果表数据量很大,注意在group by 里面的字段建立索引,同时,生产环境注意好先进行数据备份操作 。


本文题目:mysql怎么去掉重复 mysql查询重复数据保留一条
文章链接:http://cdkjz.cn/article/dodpphh.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220