点击蓝色“java大数据修炼之道”关注我哟加个“星标”,每晚21:00,一起学技术
来源: telami.cn/2019/mysql-removes-duplicate

在公司加班到八点,此为背景。

Part1加班原因

上线,解决线上数据库存在重复数据的问题,发现了程序的bug,很好解决,有点问题的是,修正线上的重复数据。

线上库有6个表存在重复数据,其中2个表比较大,一个96万+、一个30万+,因为之前处理过相同的问题,就直接拿来了上次的Python去重脚本,脚本很简单,就是连接数据库,查出来重复数据,循环删除。

emmmm,但是这个效率嘛,实在是太低了,1秒一条,重复数据大约2万+,预估时间大约在8个小时左右。。。

盲目依靠前人的东西,而不去自己思考是有问题的!总去想之前怎么可以,现在怎么不行了,这也是有问题的!我发现,最近确实状态不太对,失去了探索和求知的欲望,今天算是一个警醒,颇有迷途知返的感觉。

言归正传,下面详细介绍去重步骤。

Part2去重步骤

CREATE TABLE `animal` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('1', 'cat', '12');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('2', 'dog', '13');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('3', 'camel', '25');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('4', 'cat', '32');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('5', 'dog', '42');

目标:我们要去掉name相同的数据。

先看看哪些数据重复了

SELECT name,count( 1 )
FROMstudent
GROUP BY
NAME
HAVINGcount( 1 ) > 1;

输出:

name count(1) cat 2 dog 2

name为cat和dog的数据重复了,每个重复的数据有两条;

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(1)>1)

删除全部重复数据,一条不留

直接删除会报错

DELETE
FROMstudent
WHERENAME IN (SELECT NAME FROMstudent GROUP BYNAME
HAVINGcount( 1 ) > 1)

报错:

1093 - You can't specify target table 'student' for update in FROM clause, Time: 0.016000s

原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作

解决办法:把要更新的几列数据查询出来做为一个第三方表,然后筛选更新。

DELETE
FROMstudent
WHERENAME IN (SELECTt.NAME
FROM( SELECT NAME FROM student GROUP BY NAME HAVING count( 1 ) > 1 ) t)

删除表中删除重复数据,仅保留一条

在删除之前,我们可以先查一下,我们要删除的重复数据是啥样的

SELECT*
FROMstudent
WHEREid NOT IN (SELECTt.id FROM( SELECT MIN( id ) AS id FROM student GROUP BY `name` ) t )

啥意思呢,就是先通过name分组,查出id最小的数据,这些数据就是我们要留下的火种,那么再查询出id不在这里面的,就是我们要删除的重复数据。

开始删除重复数据,仅留一条

很简单,刚才的select换成delete即可

DELETE
FROMstudent
WHEREid NOT IN (SELECTt.id FROM( SELECT MIN( id ) AS id FROM student GROUP BY `name` ) t )

90万+的表执行起来超级快。

PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。▽加我微信,交个朋友长按/扫码添加↑↑↑1、Redis中主、从库宕机如何恢复?
2、这三种单点登录的方式你都Get吗?3、短信验证码登录流程思路及详细步骤4、面试必备:聊聊数据库中的事务和锁5、盘点 HashMap 源码中的那些优雅的设计!6、面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?右下角,您点一下在看图片
小微工资涨1毛
欢迎添加枫哥个人微信 2782278837  进粉丝群或围观朋友圈

数据插入骚操作,大批量插入轻松过滤重复数据相关推荐

  1. oracle 查的数据去重复数据,Oracle查询和过滤重复数据

    对数据库某些意外情况,引起的重复数据,如何处理呢? ----------------查重复: select * from satisfaction_survey s where s.as_side = ...

  2. C#过滤重复数据,使用泛型

    #region List<T> 过滤重复数据 public delegate bool EqualsComparer<T>(T x, T y); /// <summary ...

  3. Java List 过滤重复数据

    Java List 过滤重复数据 需求: 数据库返回结果集中包含重复数据并存入List集合中,过滤到重复数据并保留最新数据 解析: 数据库中新增记录位置在下面 而SQL查询一般为升序即从上向下查询也就 ...

  4. scrapy过滤重复数据和增量爬取

    原文链接 前言 这篇笔记基于上上篇笔记的---<scrapy电影天堂实战(二)创建爬虫项目>,而这篇又涉及redis,所以又先熟悉了下redis,记录了下<redis基础笔记> ...

  5. 如何让爬虫工具不自动过滤重复数据

    很多情况下,我们爬取某个网站的数据都需要用到爬虫工具,比如爬山虎,当爬取数据的所有字段都重复时,采集器会自动帮我们过滤掉重复数据,但是如果不想过滤掉重复数据怎么办呢? 解决方法:时间戳. 以爬山虎为例 ...

  6. excel如何晒出重复数据_3秒找出Excel中的重复数据,年底数据统计用得上,赶紧码住...

    职场人经常会碰到数据核对的任务,特别是在月底和年末,老板索要数据统计结果时,你总得检查一遍再交上去吧. 如果你对 Excel 中的基本功能不熟悉,就很可能碰到和这位妹子一样的难题: 遇到上面这种情况该 ...

  7. mysql数据库设计四大范性_数据库篇-mysql详解( 四 )之范式与数据高级骚操作

    标题.png 一 : 主键 primary key,主要的键. 一张表只能有一个字段可以使用对应的键, 用来唯一的约束该字段里面的数据, 不能重复: 这种称之为主键.一张表只能有最多一个主键 操作 增 ...

  8. python提取pdf表格数据_Python骚操作,提取pdf文件中的表格数据!

    在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报.发行上市公告等.面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取.那么如何才能高效提取出pdf文 ...

  9. 重复数据_MongoDB 自动过滤重复数据

    摘要:使用 update_one() 方法而不是 insert_one() 插入数据. 相信你一定有过这样的经历:大晚上好不容易写好一个爬虫,添加了种种可能出现的异常处理,测试了很多遍都没有问题,点击 ...

最新文章

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增模块管理界面导出功能(可按条件导出)...
  2. linux java 替换jre_Linux系统 无需JRE配置Java
  3. linux/hpux 添加用户
  4. 秋招视频攻略!13个offer,8家SSP的Q神谈算法岗秋招技巧
  5. Record of circos usage
  6. Python IDE 神器,PyCharm 2020.1 稳定版发布
  7. node(基础)_node中的javascript
  8. Lintcode: Fast Power
  9. Struts2_HelloWorld_3
  10. C++读写ini配置文件
  11. 什么是Java分布式?
  12. 高清影音发展的产物格式转换器
  13. leveldb:Arena浅析
  14. 记录一次Oracle自动化测试工具 - OATS实战分享
  15. tmac v6设置中文_给升级到10.6.8后无线BCM43xx不能用的解决办法
  16. 动态规划——背包问题(01背包问题)
  17. E680i 不用刷机的Telnet 方法
  18. 选择大于努力-----计算机院校择校
  19. 计算机图形学——双缓冲
  20. C++矩阵类的实现(只有加法)

热门文章

  1. 2021蓝桥杯第一场加油伙伴们
  2. Word图片环绕方式图解
  3. 机器学习 --- 刘建平整理
  4. html怎么自动导入数据并排序,JS实现table表格数据排序功能(可支持动态数据+分页效果)...
  5. 计算机求和便捷应用,怎么使用快速求和快捷键
  6. 计算机控制烤箱结构框图,维护简单的热风循环烘箱的结构和原理图
  7. CSS 伪类选择器 last-child 和 last-of-type 的区别
  8. js节点和元素区别【2021.11.10】
  9. 输出重定向Linux命令,Linux Shell重定向(输入输出重定向)精讲
  10. 灰狼算法Python