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

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

3天内不再提示

MySQL 批量插入不重复数据的解决方法

Android编程精选 来源:JAVA葵花宝典 作者:JAVA葵花宝典 2021-07-02 15:28 次阅读

来源丨JAVA葵花宝典

知识这个东西,看来真的要温故而知新,一直不用,都要忘记了

业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入

那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?

向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率

看来这个问题不止我一个人苦恼过。

解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。

几百万的数据,不可能查出来,做去重处理

说一下我Google到的解决方案

1、insert ignore into

当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。例如:

INSERT IGNORE INTO user (name) VALUES (‘telami’)

这种方法很简便,但是有一种可能,就是插入不是因为重复数据报错,而是因为其他原因报错的,也同样被忽略了~

2、on duplicate key update

当primary或者unique重复时,则执行update语句,如update后为无用语句,如id=id,则同1功能相同,但错误不会被忽略掉。

例如,为了实现name重复的数据插入不报错,可使用一下语句:

INSERT INTO user (name) VALUES (‘telami’) ON duplicate KEY UPDATE id = id

这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束(在你的业务中那个要作为唯一的判断就将那个字段设置为唯一约束也就是unique key)。

3、insert … select … where not exist

根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。例如:

INSERT INTO user (name) SELECT ‘telami’ FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1)

这种方法其实就是使用了mysql的一个临时表的方式,但是里面使用到了子查询,效率也会有一点点影响,如果能使用上面的就不使用这个。

4、replace into

如果存在primary or unique相同的记录,则先删除掉。再插入新记录。

REPLACE INTO user SELECT 1, ‘telami’ FROM books

这种方法就是不管原来有没有相同的记录,都会先删除掉然后再插入。

实践

选择的是第二种方式

pYYBAGDewGiAD4ryAAAloA9QPzg560.png

这里用的是Mybatis,批量插入的一个操作,mobile_number 已经加了唯一约束。这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。

责任编辑:gt

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

    关注

    7

    文章

    3794

    浏览量

    64362
  • 大数据
    +关注

    关注

    64

    文章

    8882

    浏览量

    137403

原文标题:MySQL 批量插入:如何不插入重复数据?

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

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

    Ubuntu系统常见问题及解决方法

    连接到互联网 问题描述: 用户在安装Ubuntu后发现无法连接到互联网。 解决方法: 检查网络连接: 确保网线已正确插入或Wi-Fi已连接。 检查网络设置: 打开“设置”>“网络”,检查网络配置是否正确。 重启网络服务: 打开终端,输入 sudo service netw
    的头像 发表于 12-12 14:32 243次阅读

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

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

    以太网组网常见故障及解决方法

    相互通信。 解决方法: 检查网线是否损坏,使用网线测试仪进行测试。 确保网线插头(RJ45)插入到位,没有松动。 更换网线或接口,排除物理损坏的可能性。 检查交换机和路由器的端口状态,确保它们正常工作。 2. IP地址冲突 故障现象: 网络中
    的头像 发表于 11-08 09:13 610次阅读

    数据中心提高存储性能的方法是什么?

    这些技术是走向云计算的重要的第一步。 重复数据删除 在任何数据存储系统最大的阻碍是相关的冗余数据。采用智能压缩技术,可以删除重复数据,只保留在磁盘上的
    的头像 发表于 08-05 11:40 401次阅读

    ESP32-C3使用http OTA时串口无法接收数据,请问有解决方法吗?

    在使用http OTA时串口无法接收数据,TX可以正常发送.请问有解决方法
    发表于 06-19 06:36

    鸿蒙OpenHarmony:【常见编译问题和解决方法

    常见编译问题和解决方法
    的头像 发表于 05-11 16:09 2148次阅读

    Tektronix示波器无法检测到探头的可能原因及解决方法

    的通道插口。 探头连接松动或接触不良。 探头线缆损坏导致连接问题。 解决方法: 确保探头正确插入到示波器的通道插口,并旋紧插头。 检查探头连接是否紧固,确保良好的接触。 如果发现探头线缆有损坏,及时更换或修复。 2. 探头校准问题 原因: 探
    的头像 发表于 05-08 11:09 734次阅读
    Tektronix示波器无法检测到探头的可能原因及<b class='flag-5'>解决方法</b>

    分析电源电感发热解决方法

    电子发烧友网站提供《分析电源电感发热解决方法.docx》资料免费下载
    发表于 03-29 14:39 3次下载

    EMI电磁干扰:原理、影响及解决方法详解?

    EMI电磁干扰:原理、影响及解决方法详解?|深圳比创达电子
    的头像 发表于 03-21 10:02 874次阅读
    EMI电磁干扰:原理、影响及<b class='flag-5'>解决方法</b>详解?

    激光打标机红光与激光不重合:原因及解决方案

    激光打标机红光和激光不在一个位置的问题可能由多种原因导致。以下是一些可能的原因和解决方法:1.激光器光路调整不当:激光器光路调整不当会导致激光束偏移,从而使红光与激光不重合。解决方法是重新调整激光器
    的头像 发表于 03-09 16:35 1144次阅读
    激光打标机红光与激光<b class='flag-5'>不重</b>合:原因及解决方案

    MySQL密码忘记了怎么办?MySQL密码快速重置方法步骤命令示例!

    MySQL密码忘记了怎么办?MySQL密码快速重置方法步骤命令示例! MySQL是一种常用的关系型数据库管理系统,如果你忘记了
    的头像 发表于 01-12 16:06 743次阅读

    PCB压合问题解决方法

    PCB压合问题解决方法
    的头像 发表于 01-05 10:32 1055次阅读

    导致MySQL索引失效的情况以及相应的解决方法

    导致MySQL索引失效的情况以及相应的解决方法  MySQL索引的目的是提高查询效率,但有些情况下索引可能会失效,导致查询变慢或效果不如预期。下面将详细介绍导致MySQL索引失效的情况
    的头像 发表于 12-28 10:01 752次阅读

    mysql密码忘了怎么重置

    mysql密码忘了怎么重置  MySQL是一种开源的关系型数据库管理系统,密码用于保护数据库的安全性和保密性。如果你忘记了MySQL的密码,
    的头像 发表于 12-27 16:51 6668次阅读