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

    文章

    7315

    浏览量

    93998
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89600
  • 脚本
    +关注

    关注

    1

    文章

    407

    浏览量

    29054

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    可行性:MySQL数据中台的无缝对接 数据同步与采集 工业数据中台通过数据同步工具(如CDC变更数据
    的头像 发表于 12-04 11:23 198次阅读
    工业<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

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

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

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

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

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

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

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

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

    MySQL数据备份与恢复策略

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

    MySQL数据库是什么

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

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

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

    使用插件将Excel连接到MySQL/MariaDB

    处理 MySQL 数据,进行数据清理和重复数据删除。 直接从 Excel 连接到 MySQL 要将 Excel 连接到
    的头像 发表于 01-20 12:38 1142次阅读
    使用插件将Excel连接到<b class='flag-5'>MySQL</b>/MariaDB

    适用于MySQL和MariaDB的Python连接器:可靠的MySQL数据连接器和数据

    和 Linux 的 wheel 包分发。 直接连接 该解决方案使您能够通过 TCP/IP 建立与 MySQL 或者 MariaDB 数据库服务器的直接连接,而无需数据库客户端库。另外直接连接可以提高 Python 应用程
    的头像 发表于 01-17 12:18 849次阅读
    适用于<b class='flag-5'>MySQL</b>和MariaDB的Python连接器:可靠的<b class='flag-5'>MySQL</b><b class='flag-5'>数据</b>连接器和<b class='flag-5'>数据</b>库

    MySQL数据库的安装

    MySQL数据库的安装 【一】各种数据库的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】
    的头像 发表于 01-14 11:25 866次阅读
    <b class='flag-5'>MySQL</b><b class='flag-5'>数据</b>库的安装

    岚图汽车获TÜV南德大批量WVTA证书,加速全球化进程

    在全球化浪潮下,中国汽车品牌正迎来前所未有的出海与升级机遇。近日,岚图汽车科技有限公司的岚图知音全球版COURAGE高端纯电SUV成功获得全球知名第三方检测认证机构TÜV南德意志集团颁发的欧盟大批量
    的头像 发表于 01-02 13:59 1109次阅读

    数据数据恢复—Mysql数据库表记录丢失的数据恢复流程

    Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、
    的头像 发表于 12-16 11:05 1003次阅读
    <b class='flag-5'>数据</b>库<b class='flag-5'>数据</b>恢复—<b class='flag-5'>Mysql</b><b class='flag-5'>数据</b>库表记录丢失的<b class='flag-5'>数据</b>恢复流程