当前位置: 首页 > article >正文

mysql批量插入并忽略重复的数据

前言

最近,小编在公司遇到这样一个需求,需要对新增的数据,批量插入到数据库表中,同时当插入的数据与表中数据重复了,那么保留原有的数据。针对这个需求,小编想到了如下三个语句:

  • INSERT IGNORE INTO
  • INSERT ... ON DUPLICATE KEY UPDATE
  • REPLACE INTO

接下来,我们来看下这个三个语句的区别:

1、REPLACE INTO
按照单词的意思是替换插入,也算是见文知意了。它的原理是,当发现新插入的数据与现有记录重复时,它会先删除现有记录,并插入新记录,如果记录是自增主键,它会新生成自增主键的值,插入新的记录,也就说说,它会保留新插入的数据,同时会有删除和插入两个操作。

2、INSERT … ON DUPLICATE KEY UPDATE
这个语句的意思是,当发现新插入的数据,与数据表中的数据重复时,按照某些字段进行更新,没有重复则直接更新。这个语句的好处是,我们不用进行两次操作,先进行查询有没有,然后再有的时候进行更新这样两步来操作。它一步就完成了。也是符合我们开头说的需求的,但是,它不支持批量插入。INSERT INTO ... VALUES ..., ... ON DUPLICATE KEY UPDATE 这种语法是不支持的.
如果是单条插入,这个是可以使用的。当不想要更新任何字段时,也可以在语句中使用
ON DUPLICATE KEY UPDATE DO NOTHING。从 MySQL 8.0.21 开始,ON DUPLICATE KEY UPDATE 支持 DO NOTHING 语法。

3、INSERT IGNORE INTO
插入数据时,在遇到主键或唯一索引冲突时忽略该插入操作,也就是数据保留了原有数据表的记录。
似乎,这个很符合要求,但是使用时需要注意,它除了忽略主键和唯一索引冲突,还会忽略其他类型的错误,比如说,违反外键约束、数据类型不匹配、字段值超出范围等。

总结

最后,小编使用了INSERT IGNORE INTO语句,这样在批量处理的时候,也是可以排重的,现在设计表都是不假外键的,数据类型不一样时mybatis也会做转换,字段值超出范围的数据作为不合规范的数据直接忽略了。后边,在进一步分析一下三个语句在执行过程中的枷锁情况。


http://www.kler.cn/a/413171.html

相关文章:

  • 后端开发入门
  • PostgreSQL表膨胀问题解析
  • 易速鲜花聊天客服机器人的开发(下)
  • vue3 数字滚动插件vue3-count-to
  • mysql in查询大数据量业务无法避免情境下优化
  • 如何通过ChatGPT提高自己的编程水平
  • 缓存使用规范学习
  • A050-基于spring boot物流管理系统设计与实现
  • 代码美学3:RGB转化+MATLAB制作渐变色
  • nodejs import 导入module.exports = xxx的模块, 在ES6项目中导入commonJs规范的require模块
  • 物联网实验室建设方案
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)
  • 鸿蒙本地模拟器 模拟TCP服务端的过程
  • python简单算法
  • java全栈day10--后端Web基础(基础知识)
  • Nginx 架构与设计
  • 【计算机网络】多路转接之poll
  • 【rustdesk】客户端和服务端的安装和部署(自建服务器,docker,远程控制开源软件rustdesk)
  • Android开发简单mp4播放器
  • JAVA:Spring Boot 3 实现 Gzip 压缩优化的技术指南
  • 【计算机网络】Wireshark的小测试(Protocol Layers-Wireshark抓包与协议分析实验)
  • 构建Ceph分布式文件共享系统:手动部署指南
  • 在编译Elasticsearch源码时选择Gradle版本
  • 集成 FPGA
  • docker学习的初识
  • Android和Java的发布/订阅事件总线EventBus