加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.52kongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql数据库中怎么处理重复数据

发布时间:2022-11-03 14:30:37 所属栏目:MySql教程 来源:互联网
导读: 这篇文章给大家介绍mysql数据库中怎么处理重复数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
方法一:防止出现重复数据
也就是说我们再设计表的时候,就应该

这篇文章给大家介绍mysql数据库中怎么处理重复数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

方法一:防止出现重复数据

也就是说我们再设计表的时候,就应该对这些数据设置一个UNIQUE 索引MySQL 处理重复数据,在插入的时候就可以保证其唯一性,也就不存在有重复的数据了。当然你也可以直接设置为PRIMARY KEY(主键)。效果也是一样的。

我们看一个案例:下表中无索引及主键,所以该表允许出现多条重复记录。

CREATE?TABLE?student
(
????first_name?CHAR(20),
????last_name?CHAR(20),
????sex?CHAR(10)
);

目前first_name,last_name是可以重复的,如果不想重复这里有两个解决办法:

1、设置双主键模式

CREATE?TABLE?student
(
???first_name?CHAR(20)?NOT?NULL,
???last_name?CHAR(20)?NOT?NULL,
???sex?CHAR(10),
???PRIMARY?KEY?(last_name,?first_name)
);

现在就无法插入重复数据了。

2、添加unique索引

CREATE?TABLE?student
(
???first_name?CHAR(20)?NOT?NULL,
???last_name?CHAR(20)?NOT?NULL,
???sex?CHAR(10)
???UNIQUE?(last_name,?first_name)
);

mysql join 重复数据_mysql查重复数据_MySQL 处理重复数据

这两种看起来形式好像有一点区别,但是能起到相同的作用。此时我们可以插入两条重复的数据,会发现报错。

当然我们还可以在数据库中去验证一下:

SELECT?COUNT(*)?as?repetitions,?last_name,?first_name
???????FROM?student
???????GROUP?BY?last_name,?first_name
???????HAVING?repetitions?>?1;

在这里我们统计的是 first_name 和 last_name的重复记录数,上面已经用两种方法设置了,这里肯定就是0了。

方法二:在插入时指定能否插入重复数据

在这里我们使用的是Insert ignore into 与Insert into指令。

(1)Insert ignore into会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

(2)Insert into则直接相反,会直接插入数据,不管数据库里面是否含有重复数据。

我们还是举例说明:

insert?ignore?into?student?(last_name,?first_name)?values?(?'张三',?'李四');
//结果
Query?OK,?1?rows?affected?(0.00?sec)
insert?ignore?into?student?(last_name,?first_name)?values?(?'张三',?'李四');
//结果
Query?OK,?0?rows?affected?(0.00?sec)

现在我们看出来了吧,也就是说在执行第一条插入操作的时候,看到数据库没有,则直接插入一条新纪录,因此一行记录受到影响,但是在第二次插入的时候,数据库已经有一条一样的了,因此便不会插入了,0行受到影响。

当然了还有一个指令也可以完成类似于insert ignore into相似的功能,那就是replace into。他表示的是如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。

方法三:过滤重复数据

如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

SELECT?DISTINCT?last_name,?first_name
FROM?student
ORDER?BY?last_name;

你也可以使用 GROUP BY 来读取数据表中不重复的数据:

SELECT?last_name,?first_name
FROM?student
GROUP?BY?(last_name,?first_name);

方法四:删除重复数据

这种情况其实就相当于,在水的终点处去解决。看下面sql语句:

//根据student创建一个临时表,并使用group?by过滤了重复数据
CREATE?TABLE?tmp?SELECT?last_name,?first_name,?sex
????????FROM?student;
????????GROUP?BY?(last_name,?first_name);
//删除原student表
DROP?TABLE?student;
//给这个临时表重新命名
ALTER?TABLE?tmp?RENAME?TO?stu;

当然你也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:

ALTER?IGNORE?TABLE?student
ADD?PRIMARY?KEY?(last_name,?first_name);

关于mysql数据库中怎么处理重复数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!