0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何过滤掉MySQL大批量插入的重复数据

阿铭linux 来源:CSDN 作者:CSDN 2021-08-27 11:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

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

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

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 ) FROM student GROUP BYNAME HAVING count( 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 FROM student WHERE NAME IN ( SELECT NAME FROM student GROUP BY NAME HAVING count( 1 ) 》 1)

报错:

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

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

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

DELETE FROM student WHERE NAME IN ( SELECT t.NAME FROM ( SELECT NAME FROM student GROUP BY NAME HAVING count( 1 ) 》 1 ) t)

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

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

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

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

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

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

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

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

(版权归原作者所有,侵删)

来源:telami.cn/2019/mysql-removes-duplicate-data-and-keeping-only-one/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7350

    浏览量

    95068
  • python
    +关注

    关注

    58

    文章

    4889

    浏览量

    90345
  • 脚本
    +关注

    关注

    1

    文章

    412

    浏览量

    29288

原文标题:MySQL 大批量插入,如何过滤掉重复数据?

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何100%保障大批量设备固件升级?

    在物联网普及时代,大量物联网设备接入,进行远程管理和维护。在某些场景下,需要对大批量设备进行升级,升级过程中,哪些设备升级成功或失败,没法精准确认完成闭环,怎么办?简介在物联网普及时代,大量物联网
    的头像 发表于 05-08 11:39 48次阅读
    如何100%保障<b class='flag-5'>大批量</b>设备固件升级?

    恒讯科技解析:如何安装MySQL并创建数据

    安装和管理MySQL不必复杂。只需几分钟,你就能在Linux服务器上搭建MySQL,创建第一个数据库,甚至自动化备份——同时确保数据安全有序。 什么是
    的头像 发表于 01-14 14:25 420次阅读

    工业数据中台支持接入MySQL数据库吗

    可行性:MySQL数据中台的无缝对接 数据同步与采集 工业数据中台通过数据同步工具(如CDC变更数据
    的头像 发表于 12-04 11:23 523次阅读
    工业<b class='flag-5'>数据</b>中台支持接入<b class='flag-5'>MySQL</b><b class='flag-5'>数据</b>库吗

    ulog_tag_lvl_filter_set()函数无法实现按照文档说明那样实现按模块过滤,怎么解决?

    ulog_tag_lvl_filter_set()函数无法实现按照文档说明那样实现按模块过滤,比如过滤掉所有drv.xxx的日志
    发表于 10-10 07:30

    在rt-thread studio环境中之前编译成功的项目(1234)重命名(test)后出现大批量的错误是什么原因造成?如何处理?

    在rt-thread studio环境中之前编译成功的项目(1234)重命名(test)后出现大批量的错误是什么原因造成?该如何处理?这很困扰,为啥重命名就能出现这样的情况?
    发表于 09-17 06:58

    Silicon Labs芯科科技FG23L无线SoC现已全面供货,为Sub-GHz物联网应用提供最佳性价比

    通过平衡核心性能与无与伦比的性价比,FG23L将Sub-GHz物联网(IoT)推向更广阔的市场和更大批量的应用。
    的头像 发表于 09-11 14:53 7598次阅读
    Silicon Labs芯科科技FG23L无线SoC现已全面供货,为Sub-GHz物联网应用提供最佳性价比

    边缘计算网关的数据过滤功能体现在哪

    体现如下: 1. 本地数据清洗与冗余剔除 原始数据过滤 :边缘计算网关在数据源头(如传感器、设备)附近对采集到的原始数据进行初步清洗,剔除
    的头像 发表于 09-11 11:23 982次阅读
    边缘计算网关的<b class='flag-5'>数据</b><b class='flag-5'>过滤</b>功能体现在哪

    东风新能源车大批量签约交付

    近期,东风新能源车大批量签约交付投入网约车市场,携手合作伙伴共建出行服务新标杆,成为城市绿色出行的重要一环。
    的头像 发表于 07-31 14:19 1237次阅读

    T0727J5012AHF超低剖面0805阻抗变压器50Ω至12.5Ω

    和卷筒式两种,是获取和存放大批量制造的理想选择。性能参数频率范围:700 MHz– 2.7 GHz阻抗比:50 Ω→ 12.5 Ω插入损耗:0.1 dB @ 25 °C;0.2 dB @ +85 °C
    发表于 07-21 09:27

    应用案例丨一键测量300+工件,QM系列闪测仪批量检测

    面对制造业大批量、高效率的尺寸检测需求,光子精密推出了革命性产品——QM系列图像尺寸测量仪。凭借±1μm的超高测量精度、行业领先的大批量检测能力,重新定义尺寸检测的效率标准。
    的头像 发表于 07-18 08:00 942次阅读
    应用案例丨一键测量300+工件,QM系列闪测仪<b class='flag-5'>批量</b>检测

    批量SMT加工的“定制化”与大批量生产的“标准化”:差异全解析

    一站式PCBA加工厂家今天为大家讲讲小批量SMT加工与大批量生产有什么区别?小批量SMT加工与大批量生产差异解析。   一、SMT加工的核心模式差异 1. 生产规模与设备配置 小
    的头像 发表于 07-16 09:18 1438次阅读

    MySQL数据备份与恢复策略

    数据是企业的核心资产,MySQL作为主流的关系型数据库管理系统,其数据的安全性和可靠性至关重要。本文将深入探讨MySQL
    的头像 发表于 07-14 11:11 908次阅读

    企业级MySQL数据库管理指南

    在当今数字化时代,MySQL作为全球最受欢迎的开源关系型数据库,承载着企业核心业务数据的存储与处理。作为数据库管理员(DBA),掌握MySQL
    的头像 发表于 07-09 09:50 927次阅读

    MySQL数据库是什么

    MySQL数据库是一种 开源的关系型数据库管理系统(RDBMS) ,由瑞典MySQL AB公司开发,后被Oracle公司收购。它通过结构化查询语言(SQL)进行
    的头像 发表于 05-23 09:18 1497次阅读

    CYUSB3014在FPGA发送的每两帧有效数据之间,会出现很多冗余的重复数据,问题出在哪里?

    使用BeginDataXfer(), WaitForXfer() 和 FinishDataXfer()的方法异步接收数据。目前C#端的吞吐量大于FPGA数据的发送速率,我们发现在FPGA发送的每两帧有效数据之间,会出现很多冗余的
    发表于 05-20 07:36