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

    文章

    7080

    浏览量

    89175
  • python
    +关注

    关注

    56

    文章

    4798

    浏览量

    84810
  • 脚本
    +关注

    关注

    1

    文章

    391

    浏览量

    14889

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

    Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、
    的头像 发表于 12-16 11:05 179次阅读
    <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>恢复流程

    数据数据恢复—MYSQL数据库ibdata1文件损坏的数据恢复案例

    mysql数据库故障: mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用my
    的头像 发表于 12-09 11:05 179次阅读

    PCM5100A可以播放出20khz以上的信号吗?

    如题 高于20Khz的信号会不会被过滤掉 比如 芯片内置了截止频率20khz左右的低通滤波器之类的...... 想用这芯片做个信号源
    发表于 10-25 07:00

    TLV320AIC3104将所有输入断开在i2s输出仍然有波型,可以通过寄存器设置过滤掉吗?

    TLV320AIC3104 将所有输入断开在i2s 输出仍然有波型。 这可以通过寄存器设置过滤掉吗? ps:采集音频是没问题的 但是不接输入时,输出会听到一个很细小尖锐的声音 尝试修改PGA 增益调小无明显改善
    发表于 10-18 06:36

    低至160元/㎡! 华秋PCB中大批量阶梯价来了,以量定价!

    在竞争激烈的市场中客户的产品如何实现成本优化与效率提升?华秋PCB为您带来了革命性的解决方案中、大批量阶梯价策略!以量定价→让您的每一次采购都成为节省成本的机会。PriceReduction单面
    的头像 发表于 09-27 08:02 403次阅读
    低至160元/㎡! 华秋PCB中<b class='flag-5'>大批量</b>阶梯价来了,以量定价!

    EVASH Ultra EEPROM和Microchip 32位MCU在功放产品中的大批量应用

    EVASH Ultra EEPROM和Microchip 32位MCU在功放产品中的大批量应用
    的头像 发表于 06-24 17:39 442次阅读

    英特尔3nm制程工艺“Intel 3”投入大批量生产

    据外媒最新报道,全球知名的处理器大厂英特尔在周三宣布了一个重要的里程碑:其先进的3nm级制程工艺技术“Intel 3”已在两个工厂正式投入大批量生产。这一技术的突破,无疑将为英特尔在超高性能计算领域带来显著优势。
    的头像 发表于 06-21 09:31 555次阅读

    请问CX3能否进行图像过滤

    嗨, 我们想为 IMX179 传感器做一个 MIPI 到 USB 3.0 的桥接器。 我们只对与之前不同的图像感兴趣。 因此,最好能过滤掉(不通过 USB 3.0 通道发送)与前一图像\"
    发表于 05-22 07:19

    华为P70系列或将于4月发布,供应链已批量供货

    据悉,近日华为手机供应链证实,已开始向该品牌高端旗舰手机P70系列供应大批量产品,这标志着该新品正在逐步进入市场。
    的头像 发表于 03-27 09:31 1162次阅读

    安泰~大批量电源维修,感谢客户的信任

    示波器仪器仪表
    安泰仪器维修
    发布于 :2024年03月04日 14:43:55

    请问Bulk传输是否可以被Interrupt传输打断?

    我用win10电脑与FX3设备进行通信,需要用Bulk传输从FX3读取大批量数据,但同时每100ms需用Interrupt EP去读取少量数据,驱动使用的Cypress的。 想问一下Bulk传输过程中,发起中断传输,这次中断传输
    发表于 02-28 06:13

    基于微软数据中心的FPGA讲解分析

    FPGA 和 GPU 最大的区别在于体系结构,FPGA 更适合做需要低延迟的流式处理,GPU 更适合做大批量同构数据的处理。
    发表于 02-27 14:45 695次阅读
    基于微软<b class='flag-5'>数据</b>中心的FPGA讲解分析

    FILTER单元无法过滤重复的故障及受影响的功能块

    电子发烧友网站提供《FILTER单元无法过滤重复的故障及受影响的功能块.pdf》资料免费下载
    发表于 02-21 10:26 0次下载
    FILTER单元无法<b class='flag-5'>过滤</b>出<b class='flag-5'>重复</b>的故障及受影响的功能块

    如何将MS访问数据转换为MySQL

    借助dbForgeStudio for MySQL,您可以轻松地将数据从MicrosoftAccess迁移到MySQL,并保持数据和功能的完整性。这个过程将允许您利用更具可伸缩性和功能
    的头像 发表于 01-23 13:47 439次阅读
    如何将MS访问<b class='flag-5'>数据</b>转换为<b class='flag-5'>MySQL</b>