前言

这是一个基本问题,这篇文章是我很早之前遇到的一种情况,后来在学习视频的时候又遇到了一次,因此给出一个总结。其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头,第二个就是在水流经的路上。我们带着这两种思路继续往下看:

问题

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

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

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

CREATETABLEstudent

(

first_name CHAR(20),

last_name CHAR(20),

sex CHAR(10)

);

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

1、设置双主键模式

CREATETABLEstudent

(

first_name CHAR(20)NOTNULL,

last_name CHAR(20)NOTNULL,

sex CHAR(10),

PRIMARYKEY(last_name, first_name)

);

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

2、添加unique索引

CREATETABLEstudent

(

first_name CHAR(20)NOTNULL,

last_name CHAR(20)NOTNULL,

sex CHAR(10)

UNIQUE(last_name, first_name)

);

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

SELECTCOUNT(*)asrepetitions, last_name, first_name

FROMstudent

GROUPBYlast_name, first_name

HAVINGrepetitions > 1;

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

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

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

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

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

我们还是举例说明:

insertignoreintostudent (last_name, first_name)values('张三','李四');

//结果

Query OK, 1 rowsaffected (0.00 sec)

insertignoreintostudent (last_name, first_name)values('张三','李四');

//结果

Query OK, 0 rowsaffected (0.00 sec)

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

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

方法三:过滤重复数据

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

SELECTDISTINCTlast_name, first_name

FROMstudent

ORDERBYlast_name;

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

SELECTlast_name, first_name

FROMstudent

GROUPBY(last_name, first_name);

方法四:删除重复数据

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

//根据student创建一个临时表,并使用group by过滤了重复数据

//根据student创建一个临时表,并使用groupby过滤了重复数据

CREATETABLEtmpSELECTlast_name, first_name, sex

FROMstudent;

GROUPBY(last_name, first_name);

//删除原student表

DROPTABLEstudent;

//给这个临时表重新命名

ALTERTABLEtmp RENAMETOstu;

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

ALTERIGNORETABLEstudent

ADDPRIMARYKEY(last_name, first_name);

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

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

mysql 处理数据_MySQL数据库,如何处理重复的数据?相关推荐

  1. mysql scrapy 重复数据_mysql数据库如何处理重复数据?

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

  2. mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...

    该篇文章我们介绍由于非法硬件关机,造成了MySQL数据库的数据表损坏,数据库不能正常运行的一个实例.下面学步园小编来讲解下MySQL数据库非法关机造成数据表损坏怎么排查? MySQL数据库非法关机造成 ...

  3. mysql插10万条数据_MySQL数据库插入100w条数据要花多久?

    MySQL数据库插入100w条数据要花多久? 1.多线程插入(单表) 2.多线程插入(多表) 3.预处理SQL 4.多值插入SQL 5.事务(N条提交一次) # 多线程插入(单表) 问:为何对同一个表 ...

  4. mysql 删除时间范围数据_mysql数据库按时间删除数据总结

    今天访问程序时报如下异常: 主要原因如下: 数据库所在磁盘空间不够所致. 于是登录数据库所在的服务器,查看了下数据库所占的磁盘空间如下: 可以看到磁盘的33G,被全部占满了,于是就开始了数据库表的清理 ...

  5. mysql 创建重复数据库_MySQL数据库,如何处理重复的数据?

    前言 这是一个基本问题,这篇文章是我很早之前遇到的一种情况,后来在学习视频的时候又遇到了一次,因此给出一个总结.其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头, ...

  6. mysql数据库删除重复的数据只保留一条

    问题引入 假设一个场景,一张用户表,包含 3 个字段:id,identity_id,name. 现在身份证号 identity_id 和姓名 name 有很多重复的数据,需要删除多余数据只保留一条有效 ...

  7. Excel向数据库插入数据和数据库向Excel导出数据

    为了熟悉java里工作簿的相关知识点,所以找了"Excel向数据库插入数据和数据库向Excel导出数据"的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 ...

  8. mysql中如何去除重复数据_mysql数据库如何去除重复数据

    mysql数据库去除重复数据的方法:1.查询需要删除的记录,会保留一条记录:2.删除重复记录,只保留一条记录,代码为[delete a from test1 a, (...)as bid from t ...

  9. MySql数据库去除重复的数据

    今天群内有群友提出了一个问题,就是MySql中删除重复数据的问题,然后回答了一下,发现正好接触到了之前可能没关注的一点儿小知识,在此做下简要记录(哦对,昨天晚上在试用腾讯云数据库的时候还遇到一个问题, ...

最新文章

  1. 数据结构的定义和简介
  2. 【 C 】字符串函数专题
  3. 输出字符数字空格个数
  4. 一种结合混沌密码理论的彩色图象水印算法
  5. shell脚本采用crontab定时备份数据库日志
  6. sql增删改查_Sirvia 一套web端增删改查系统
  7. 裸奔、抽烟、凡尔赛,原来数学家玩得这么野……
  8. vue element项目常见实现表格内部可编辑功能
  9. android屏幕适配流程,Android屏幕适配姿势
  10. 汉诺塔C语言递归实现详解
  11. java如何制作浪漫表白界面_表白网页在线制作详细教程-我要表白网-最浪漫的表白网页在线生成网站...
  12. Linux虚拟机远程连接工具
  13. java输战舰_什么是最好的战舰AI?
  14. 五笔字形字根及难字拆分
  15. ANSYS二次开发:Python解析ansys fluent结果文件
  16. 【解决方案】雷电模拟器去开屏广告
  17. 什么叫超融合基础架构?
  18. UI层自动化测试框架(五):业务层和用例层
  19. Maven中央仓库配置文件
  20. JAVA项目开发笔记(2)JTA 部分:使用JOTM

热门文章

  1. 【Redis】redis-3.0.0安装以及集群的搭建
  2. 计算机网络实验_中心聚焦|山东省计算机网络重点实验室学术交流会议顺利召开...
  3. 【Flink】Flink Failed to push metrics to PushGateway Connect refuse
  4. 【算法】剑指 Offer 03. 数组中重复的数字
  5. 【Flink】Flink 清理过期 Checkpoint 目录的正确姿势
  6. 【Elasticsearch】es 查询 multi_match 与 match_phrase
  7. 【Kafka】kafka消费者参数
  8. 【flume】flume的安装配置理解
  9. 两个 Integer 数值之间不建议使用 “==” 进行比较
  10. android点击获得坐标,android点击MapView任意一点获得坐标