前言

前段时间,很多人问我能不能写一些数据库的文章,正好自己在测试mysql数据库性能的时候,出现了一个问题,也就是出现了很多重复的数据,想起来自己long long ago写过一篇类似的,仅此就拿来总结了一下。如果你在使用mysql的时候也遇到了这个问题,希望能对你有所帮助。

注意:

这篇文章不是数据库系列的正式文章,有关mysql、MongoDB、redis、oracle等数据库系列的文章正在整理中。

其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头,第二个就是在水流经的路上。我们带着这两种思路继续往下看:

问题

在我们的mysql数据库中,经常会出现一些重复的数据,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。 我们如何去处理呢?

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

也就是说我们再设计表的时候,就应该对这些数据设置一个UNIQUE 索引,在插入的时候就可以保证其唯一性,也就不存在有重复的数据了。当然你也可以直接设置为PRIMARY KEY(主键)。效果也是一样的。 我们看一个案例:下表中无索引及主键,所以该表允许出现多条重复记录。

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

1、设置双主键模式

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

2、添加unique索引

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

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

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

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

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

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

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

我们还是举例说明:

现在我们看出来了吧,也就是说在执行第一条插入操作的时候,看到数据库没有,则直接插入一条新纪录,因此一行记录受到影响,但是在第二次插入的时候,数据库已经有一条一样的了,因此便不会插入了,0行受到影响。 当然了还有一个指令也可以完成类似于insert ignore into相似的功能,那就是replace into。他表示的是如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。

方法三:过滤重复数据

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

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

方法四:删除重复数据

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

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

OK,解决办法这么多,相信能解决你的问题。

公众号:java的架构师技术栈。

源数据怎么排查重复MySQL_面试官:在使用mysql数据库时,遇到重复数据怎么处理?...相关推荐

  1. 从面试官问“为什么选择mysql数据库”说开去

    前几天面试,面试官问我:"为什么选择mysql数据库".现在想想,有如下的问题需要解决 关系型数据库有什么特点及举例 非关系型数据库有什么特点及举例 关系型数据库与非关系型数据库有 ...

  2. 面试官:说说Mysql数据库分库分表,并且会有哪些问题?

    之前一篇文章已经谈到了数据库集群之主从集群也就是读写分离,也提到了读写分离其实只是分担了访问的压力,但是存储的压力没有解决. 存储的压力说白了就是随着系统的演化,需求的增加,可能表的数量会逐渐增多,比 ...

  3. pyspark.sql写入mysql_将pyspark dataframe写入MySQL数据库时出错

    我得到以下错误: "Caused by: java.lang.NoSuchMethodException: org.apache.spark.sql.execution.datasource ...

  4. 面试官问:MySQL 的自增 ID 用完了,怎么办?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:程序猿面试指南 既然这块知识点不清楚,那回头就自己动手实践下 ...

  5. 在 MySQL 数据库中删除重复记录的步骤

    在 MySQL 数据库中删除重复记录的步骤 当我们在处理数据库中的数据时,有时候会出现重复记录的情况,这些重复记录会影响数据的正确性,需要将其删除.下面是在 MySQL 数据库中删除重复记录的步骤: ...

  6. 面试官:给我一个避免消息重复消费的解决方案?

    欢迎关注方志朋的博客,回复"666"获面试宝典 消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值. 我们通常会认为,消息中间件是一个可靠的组件--这里 ...

  7. mysql重复记录大于十的数据库_面试官:在使用mysql数据库时,遇到重复数据怎么处理?...

    前言 前段时间,很多人问我能不能写一些数据库的文章,正好自己在测试mysql数据库性能的时候,出现了一个问题,也就是出现了很多重复的数据,想起来自己long long ago写过一篇类似的,仅此就拿来 ...

  8. 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/exC8JdQS InnoDB的一棵B+树可以存放多少行数 ...

  9. 面试官出的MySQL索引问题,这篇文章全给你解决!

    原文链接:blog.ouyangsihai.cn >> MySQL的B 树索引的概念.使用.优化及使用场景 在看这篇文章之前,我们回顾一下前面的几篇关于MySQL的文章,应该对你读下面的文 ...

最新文章

  1. 项目配置laungchImage
  2. gcc 提供的原子操作
  3. python 哪些比赛项目_70个超火python小项目列表,拿走·不谢
  4. 用《叩响C#之门》复习C#基础知识 第五章 枚举、结构体和数组
  5. 自由自在带你品尝一种能长出果蔬的冰淇淋
  6. redis实战:使用redis实现自动补全
  7. php中var_dump()函数
  8. 吸收Mockito的流利度
  9. MySQL数据库数据分开存储
  10. 系统吞吐量评估方法 冯凌圣
  11. udp协议服务器客户端流程图,UDP 协议通信服务器端客户端.doc
  12. asp.net core 官方文档
  13. 每个人心中都有一片极乐净土
  14. easyexcel导入固定sheet_springboot批量导入excel数据
  15. Jquery常用开发插件收集
  16. 苹果/安桌点歌系统代码
  17. 企业微信怎么批量加人?怎么管理员工?看看这套系统
  18. word封面下划线长度固定
  19. 软件测试的概念与过程
  20. 网线水晶头制作及标准接法教程,运维必备硬技能

热门文章

  1. 转→js数组遍历 千万不要使用for...in...
  2. ntp 配置详解(转载后整理汇总)
  3. error LNK2005: void * __cdecl operator new(unsigned int) (??2@YAPAXI@Z) already defined in LIBCMT.
  4. 阿里云服务器开启端口
  5. 原型和构造函数(1)
  6. .NET开发人员必看:提高ASP.NET Web应用性能的24种方法和技巧——转
  7. Java基础之路--引用数据类型之数组
  8. tomcat 内存溢出问题
  9. input中的name,value以及label中的for
  10. 学习日常笔记day12jsp基础