返回顶部
首页 > 资讯 > 数据库 >Mysql批量插入数据时该如何解决重复问题详解
  • 453
分享到

Mysql批量插入数据时该如何解决重复问题详解

2024-04-02 19:04:59 453人浏览 薄情痞子
摘要

目录前言一、三种方法二、细节2.1、insert ignore into2.2 、insert into ... on duplicate key update2.3、replace into三、总结前言 当数据库中存量

前言

数据库中存量数据较多时,或者是在批量插入操作时,很容易出现插入重复数据的问题。

一、三种方法

Mysql 中,当存在主键冲突或唯一键冲突的情况下,根据插入策略不同,一般有以下三种避免方法:

insert ignore into:若没有则插入,若存在则忽略

replace into:若没有则正常插入,若存在则先删除后插入

insert into ... on duplicate key update:若没有则正常插入,若存在则更新

注意,使用以上方法的前提是表中有一个 PRIMARY KEY 或 UNIQUE 约束/索引,否则,使用以上三个语句没有特殊意义,与使用单纯的 INSERT INTO 效果相同。

测试表结构:

Mysql批量插入数据时该如何解决重复问题详解

测试表数据:

Mysql批量插入数据时该如何解决重复问题详解

二、细节

2.1、insert ignore into

insert ignore 会根据主键或者唯一键判断,忽略数据库中已经存在的数据,若数据库没有该条数据,就插入为新的数据,跟普通的 insert into 一样。若数据库有该条数据,就忽略这条插入语句,不执行插入操作。

insert ignore into student(age) values (12),(13);

Mysql批量插入数据时该如何解决重复问题详解

age=12的数据已存在,因此未插入(根据创建时间可得),age=13的数据不存在,因此成功插入

2.2 、insert into ... on duplicate key update

在 insert into 语句末尾指定 on duplicate key update,会根据主键或者唯一键判断:若数据库有该条数据,则直接更新原数据,相当于 update,若数据库没有该条数据,则插入为新的数据,跟普通的 insert into 一样。

insert into student(age) values (12),(13) 
ON DUPLICATE KEY UPDATE student.created_at = '2022-01-01 00:00:00';

Mysql批量插入数据时该如何解决重复问题详解

age=12的记录已存在,因此created_at字段被更新。age=13的记录不存在,因此成功插入

2.3、replace into

 replace into student(age) values (12),(13);

Mysql批量插入数据时该如何解决重复问题详解

age=12的记录已存在,因此被删除重新插入(由createdAt值可知)。age=13的记录不存在,因此成功插入

replace into 会根据主键或者唯一键判断:

  • 若表中已存在该数据,则先删除此行数据,然后插入新的数据,相当于 delete + insert
  • 可能会丢失数据、主从服务器的 AUTO_INCREMENT 不一致。
  • 若表中不存在该数据,则直接插入新数据,跟普通的 insert into 一样

三、总结

1)在主键冲突情况下,三种方法都可以使用

2)在唯一键冲突情况下,且有自增主键时:三种方法都会出现 AUTO_INCREMENT 不连续问题,且这种不连续不会同步更新到 slave 的 AUTO_INCREMENT。当 master 被 kill,且 slave 升级为 master 时,就会出现主键冲突问题。(因为事务原因,即使没有插入成功,也会占用一个自增id。row模式binlog下,主从的数据同步是一致的,主键也一致。有没有影响取决于主从同步模式)

  • statement格式:binlog记录的是实际执行的sql语句
  • row格式:binlog记录的是变化前后的数据(涉及所有列),形如update table_a set col1=value1, col2=value2 ... where col1=condition1 and col2=condition2 ...
  • mixed格式:默认选择statement格式,只在需要时改用row格式

3)replace into 方法可能会导致部分数据丢失。

到此这篇关于mysql批量插入数据时该如何解决重复问题的文章就介绍到这了,更多相关Mysql批量插入数据重复问题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: Mysql批量插入数据时该如何解决重复问题详解

本文链接: https://lsjlt.com/news/117121.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mysql批量插入数据时该如何解决重复问题详解
    目录前言一、三种方法二、细节2.1、insert ignore into2.2 、insert into ... on duplicate key update2.3、replace into三、总结前言 当数据库中存量...
    99+
    2024-04-02
  • MySql批量插入时如何不重复插入数据
    目录前言一、insert ignore into二、on duplicate key update三、replace into总结前言 Mysql插入不重复的数据,当大数据量的数据需...
    99+
    2024-04-02
  • Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的大批量插入问题?
    Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的大批量插入问题?导入Excel数据到MySQL是日常开发中经常遇到的任务之一。对于少量数据的导入,可以使用数据库客户端工具或者命令行进行插入操作。但当面对大批量数据导入时,简...
    99+
    2023-10-22
    数据导入 批量插入 Mysql问题解决
  • 详解MySql如何不插入重复数据
    目录1、insert ignore into2、on duplicate key update3、insert ... select ... where not exist4、replace into...
    99+
    2023-01-17
    MySql不插入重复数据 MySql重复数据
  • 关于MySQL 大批量插入时如何过滤掉重复数据
    目录一、发现问题二、删除全部重复数据,一条不留三、删除表中删除重复数据,仅保留一条四、开始删除重复数据,仅留一条前言: 加班原因是上线,解决线上数据库存在重复数据的问题,发现了程序的...
    99+
    2024-04-02
  • 如何解决MySQL批量插入和唯一索引问题
    这篇文章主要介绍了如何解决MySQL批量插入和唯一索引问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL批量插入问题在开发项目时,...
    99+
    2024-04-02
  • 如何解决mysql插入时间戳问题
    这篇文章将为大家详细讲解有关如何解决mysql插入时间戳问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据表中设置的是timestamp(6),然后时间...
    99+
    2024-04-02
  • mybatis和mybatisplus批量插入问题示例详解
    目录1. 思路分析:2. rewriteBatchedStatements=true3.使用mybatis批量插入:4. 使用mybatisplus批量插入5业务场景一对多怎么处理:...
    99+
    2023-05-15
    mybatis批量插数据 mybatisplus批量插入 mybatis-plus批量insert
  • mybatis和mybatisplus批量插入问题怎么解决
    这篇文章主要介绍了mybatis和mybatisplus批量插入问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatis和mybatisplus批量插入问题怎么解决文章都会有所收获,下面我们一起...
    99+
    2023-07-06
  • SQL Server批量插入数据案例详解
    在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题。下面介绍SQL Serv...
    99+
    2024-04-02
  • mybatis批量更新插入,解决失败的问题
    update sys_issue first_class = #{item.first}, second_class = #{item.second}, up...
    99+
    2023-09-01
    mybatis mysql java
  • order by+limit分页时数据重复问题如何解决
    本文小编为大家详细介绍“order by+limit分页时数据重复问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“order by+limit分页时数据重复问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-07-05
  • 怎么解决java并发请求下数据插入重复问题
    本篇内容介绍了“怎么解决java并发请求下数据插入重复问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言前段时间发现数据库里经常会存在两...
    99+
    2023-06-25
  • mysql数据插入覆盖和时间戳的问题及解决
    目录数据插入覆盖和时间戳问题1.数据插入问题2. 时间加减问题3. 时间格式化问题覆盖旧数据的mysql插入数据插入覆盖和时间戳问题 1.数据插入问题 当我们insert数据时,插入...
    99+
    2024-04-02
  • Mybatis-plus 批量插入太慢的问题解决(提升插入性能)
    MyBatis-Plus(简称MP)是一个MyBatis的增强工具,旨在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。 特点 无侵入:只做增强不做改变,引入它不会...
    99+
    2024-04-02
  • Spring Boot如何解决Redis缓存+MySQL批量入库问题
    这篇文章给大家分享的是有关Spring Boot如何解决Redis缓存+MySQL批量入库问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。架构设计架构图:时序图记录基础数据MySQL表结构CREATE...
    99+
    2023-06-29
  • sqlite批量插入数据报错怎么解决
    在SQLite中进行批量插入数据时,可能会遇到以下问题导致报错: 数据格式不正确:确保插入的数据格式与表定义的格式一致,例如日期...
    99+
    2024-04-10
    sqlite
  • 如何解决Mysql大量数据导入遇到的问题
    这篇文章主要介绍如何解决Mysql大量数据导入遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中,经常会碰到往数据库中导入大量数据,以便利用sql进行数据分析。在导入数...
    99+
    2024-04-02
  • java并发请求下数据插入重复问题的解决方法
    目录前言分布式锁工具类在过滤器实现请求拦截总结前言 前段时间发现数据库里经常会存在两条相同的用户数据,导致数据查询异常。查了原因,发现前端微信小程序在授权登录时,有时会出现同时发送了...
    99+
    2024-04-02
  • Linq插入数据问题怎么解决
    这篇文章主要讲解了“Linq插入数据问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linq插入数据问题怎么解决”吧!今天用Linq插入数据,总是插入错误,说某个主键字段不能为空,...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作