数据插入骚操作,大批量插入轻松过滤重复数据
点击蓝色“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 进粉丝群或围观朋友圈
数据插入骚操作,大批量插入轻松过滤重复数据相关推荐
- oracle 查的数据去重复数据,Oracle查询和过滤重复数据
对数据库某些意外情况,引起的重复数据,如何处理呢? ----------------查重复: select * from satisfaction_survey s where s.as_side = ...
- C#过滤重复数据,使用泛型
#region List<T> 过滤重复数据 public delegate bool EqualsComparer<T>(T x, T y); /// <summary ...
- Java List 过滤重复数据
Java List 过滤重复数据 需求: 数据库返回结果集中包含重复数据并存入List集合中,过滤到重复数据并保留最新数据 解析: 数据库中新增记录位置在下面 而SQL查询一般为升序即从上向下查询也就 ...
- scrapy过滤重复数据和增量爬取
原文链接 前言 这篇笔记基于上上篇笔记的---<scrapy电影天堂实战(二)创建爬虫项目>,而这篇又涉及redis,所以又先熟悉了下redis,记录了下<redis基础笔记> ...
- 如何让爬虫工具不自动过滤重复数据
很多情况下,我们爬取某个网站的数据都需要用到爬虫工具,比如爬山虎,当爬取数据的所有字段都重复时,采集器会自动帮我们过滤掉重复数据,但是如果不想过滤掉重复数据怎么办呢? 解决方法:时间戳. 以爬山虎为例 ...
- excel如何晒出重复数据_3秒找出Excel中的重复数据,年底数据统计用得上,赶紧码住...
职场人经常会碰到数据核对的任务,特别是在月底和年末,老板索要数据统计结果时,你总得检查一遍再交上去吧. 如果你对 Excel 中的基本功能不熟悉,就很可能碰到和这位妹子一样的难题: 遇到上面这种情况该 ...
- mysql数据库设计四大范性_数据库篇-mysql详解( 四 )之范式与数据高级骚操作
标题.png 一 : 主键 primary key,主要的键. 一张表只能有一个字段可以使用对应的键, 用来唯一的约束该字段里面的数据, 不能重复: 这种称之为主键.一张表只能有最多一个主键 操作 增 ...
- python提取pdf表格数据_Python骚操作,提取pdf文件中的表格数据!
在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报.发行上市公告等.面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取.那么如何才能高效提取出pdf文 ...
- 重复数据_MongoDB 自动过滤重复数据
摘要:使用 update_one() 方法而不是 insert_one() 插入数据. 相信你一定有过这样的经历:大晚上好不容易写好一个爬虫,添加了种种可能出现的异常处理,测试了很多遍都没有问题,点击 ...
最新文章
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增模块管理界面导出功能(可按条件导出)...
- linux java 替换jre_Linux系统 无需JRE配置Java
- linux/hpux 添加用户
- 秋招视频攻略!13个offer,8家SSP的Q神谈算法岗秋招技巧
- Record of circos usage
- Python IDE 神器,PyCharm 2020.1 稳定版发布
- node(基础)_node中的javascript
- Lintcode: Fast Power
- Struts2_HelloWorld_3
- C++读写ini配置文件
- 什么是Java分布式?
- 高清影音发展的产物格式转换器
- leveldb:Arena浅析
- 记录一次Oracle自动化测试工具 - OATS实战分享
- tmac v6设置中文_给升级到10.6.8后无线BCM43xx不能用的解决办法
- 动态规划——背包问题(01背包问题)
- E680i 不用刷机的Telnet 方法
- 选择大于努力-----计算机院校择校
- 计算机图形学——双缓冲
- C++矩阵类的实现(只有加法)
热门文章
- 2021蓝桥杯第一场加油伙伴们
- Word图片环绕方式图解
- 机器学习 --- 刘建平整理
- html怎么自动导入数据并排序,JS实现table表格数据排序功能(可支持动态数据+分页效果)...
- 计算机求和便捷应用,怎么使用快速求和快捷键
- 计算机控制烤箱结构框图,维护简单的热风循环烘箱的结构和原理图
- CSS 伪类选择器 last-child 和 last-of-type 的区别
- js节点和元素区别【2021.11.10】
- 输出重定向Linux命令,Linux Shell重定向(输入输出重定向)精讲
- 灰狼算法Python