SQL批量插入—针对重复数据插入的总结

mysql批量插入与存在相同记录时自动更新操作 开发框架spring boot,ibatis 项目开发中,需要通过文档上传,实现考勤记录的添加,同时针对重复的记录进行更新操作。考虑到数据量,能在SQL中实现更好,为此我在网上查询许久,终于找到合适的方法。那就是通过insert中的ON DUPLICATE KEY UPDATE的方法,对设为唯一索引的number进行区分,当员工的编号重复时进行更新,不然就执行插入。下面是相关代码: @Inse... 阅读详情

1. 需求分析

需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入。那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?

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

2. on duplicate key update

(1)说明

1:当primary或者unique重复时,则执行update语句,这里说的update语句指的是遇到重复时执行on duplicate key update后的语句

2:如果ON duplicate KEY UPDATE username= username则表示遇到重复错误时不报错,同时也不会更新数据,这个id指的的对比的字段

3::如果ON duplicate KEY UPDATE username = “bob”,则表示遇到冲突时将冲突的这条记录,执行UPDATE username = “bob”,即表示遇到冲突时会更新数据

(2)示例

当前有staff表,有一条测试数据,其中staff_id为主键
在这里插入图片描述
【1】测试示例一
针对staff_id=1的记录执行下面的插入语句

INSERT INTO staff (staff_id, username) VALUES (1,'bob') ON duplicate KEY UPDATE username = username;

在这里插入图片描述

【结果】
不会报错也不会执行执行,即忽略当前执行语句

【2】测试示例二
针对staff_id=1的记录执行下面的插入语句

INSERT INTO staff (staff_id, username) VALUES (1,'bob') ON duplicate KEY UPDATE username = "bob";

在这里插入图片描述
在这里插入图片描述
注意此时数据已被更新

2. insert … select … where not exist

(1)说明

上面描述的场景是必须是primary 和unique约束来判断,但是在很多的场景中我们不能去修改原表的约束,根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。
这种方法其实就是使用了mysql的一个临时表的方式,但是里面使用到了子查询,效率也会有一点点影响,如果能使用上面的就不使用这个。

【总结】
1:不需要要求严格的约束表结构限制
2:可以设置多条件联合判断

(2)示例

【需求】
当前有一个staff表,在插入时需要不能重复插入username和last_name相同的用户信息,目前表结构没有二者的约束,重复则跳过不插入
在这里插入图片描述

INSERT INTO staff (username ,last_name ) SELECT  'Alice' ,'Charles'  FROM dual WHERE NOT EXISTS (SELECT 1 FROM staff WHERE username='Alice' and  last_name='Charles' )

在这里插入图片描述

3. replace into

(1)说明

如果存在primary or unique相同的记录,则先删除掉。再插入新记录。这种方法就是不管原来有没有相同的记录,都会先删除掉然后再插入。

当前情况比较适用于数据完整性要求不高的情况,比如日志数据,只要保证插入即可不要报错影响主干业务

(2)示例

原表有一个id为1的数据,当再次插入一条ID为1的数据时
在这里插入图片描述

REPLACE INTO staff  (staff_id, username,last_name)  SELECT 1, 'Alice' ,'Charles' FROM dual

在这里插入图片描述

项目管理-(补充)七种基本质量工具 七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵) 阅读详情

相关推荐

最新版Node.js下载安装及环境配置教程(非常详细)

选择对应你系统的Node.js版本。

DN金猿的博客 12万+

SQL 语句之insert语句插入数据:若表中有重复的主键或数据继续插入解决方案

已知条件:MySQL数据库 存在一张表,表名为teacher,主键为id,表中有4行数据 select * from teacher;   要求:要求使用数据库插入语句往表中插入数据,若需要插入表中的数据(或者数据的主键)如果已经在表中存在,那么要求SQL在执行的时候不能报错。 例如:插入一行id=3,name=丁老师,salary=5000的记录, i

学亮编程手记 5万+

Windows Server 2012 R2虚拟机安装全攻略:从镜像选择到网络配置一步到位

本文提供Windows Server 2012 R2虚拟机安装全攻略,涵盖从镜像选择到网络配置的完整流程。详细讲解在Oracle VM VirtualBox中的安装步骤、TCP/IP网络设置、系统优化及常见问题解决方案,帮助用户快速搭建可立即投入使用的服务器环境。特别适合IT初学者和系统管理员学习传统服务器应用的部署与配置。

weixin_28363123的博客 538

MySQL 插入数据 数据重复 从另一个表导入数据

当使用MySQL插入数据时,我们可以根据需求选择合适的插入语句

我的博客 7982

KLayout教程(二)编辑不同的形状

首先画一个基础的矩形,然后双击他可以定义他的坐标

集成光电子 1万+

第二十六届中国机器人及人工智能大赛CRAIC决赛小型桌面级-立体仓储代码分享

国二奖,精度还有不少问题,没有视觉模块,单线程,比起其他大佬写的确实还有欠缺,继续加油吧。

qq_68232259的博客 691

SQL 确定两个表是否有相同的数据

在比较两个表的时候,比较容易的做法是,在比较数据之前先单独比较行数。计算出每一行数据出现的次数,并作为查询结果的一列返回。我们要比较每一行的数据及其出现的次数。,这取决于你使用的数据库管理系统)可以很容易地比较表中的数据。与员工 WARD 相关的数据有两行,这表明相应的解决方案不仅要找出来不同的数据,还要找到重复的数据。子句会过滤掉重复项,所以如果两个表的行数相同,则只会返回一行数据。的数据以及两行员工 WARD 的数据。后面的查询语句做了相反的操作,它找出了所有存在于内嵌视图。前面的查询相反的操作。

m0_67621290的博客 6964

python 写一个简单的 telegram bot (电报机器人)

replit.com 环境配置太恶心了,只能使用 poetry.poetry 这个名字是挺好听,用起来也是很垃圾,太恶心。heroku.com 注册登录不方便,需要各种验证。所以,部署的问题,目前搁置。

waterHBO的博客 3197

sqlserver防止插入重复数据

MERGE INTO ljlldata AS target" + " USING (VALUES (#{yesflow},#{wlwpara}, #{tableBao}, #{paraName}, #{pdf}, #{lastDayStr},#{yesValue})) " + " AS source (yesflow,wlwpara, tableBao, paraName, pdf,lastDayStr,yesValue)" + " ON (target.lastDayStr = source.lastDa

gaohuimina的博客 1048

PLC控制气缸与电磁阀:从原理到实战编程详解

在工业自动化领域,很多工程师都能编写PLC程序控制电机启停,但当涉及到气缸和电磁阀的精确控制时,却常常遇到动作不协调、响应延迟甚至设备损坏的问题。这背后的关键不在于PLC编程本身,而在于对气动元件特性和控制逻辑的深入理解。 本文将从实际工程问题出发,深入解析气缸与电磁阀的工作原理、PLC控制逻辑设计、常见故障排查方法,并通过完整的梯形图实例,帮助读者掌握气动系统自动化编程的核心要点。无论你是刚接触PLC的初学者,还是希望提升气动控制技能的工程师,都能从中获得实用的技术指导。 1. 气缸与电磁阀在自动化控制中

weixin_42522374的博客 338

Python实战:打造学生信息管理系统

通过本教程,我们构建了一个简单的学生信息管理系统,实现了基本的添加、删除、修改和查询功能。当然,这个系统还有很多可以改进和扩展的地方,比如添加用户界面、增加数据持久化功能、支持批量操作等。简介:本文将介绍如何使用Python编写一个功能齐全的学生信息管理系统,包括添加、删除、修改和查询学生信息的基本操作。学生信息管理系统是学校日常管理中不可或缺的一部分,它能够帮助管理人员快速、准确地管理学生信息,提高工作效率。为了实现上述功能,我们可以设计一个包含学生信息的字典,并使用函数来封装各个操作。

铭渊老黄 1490

MySQL中的insert ignore into, replace into等的一些用法总结

MySQL replace into 有三种形式: 1. replace into tbl_name(col_name, ...) values(...) 2. replace into tbl_name(col_name, ...) select ... 3. replace into tbl_name set col_name=value, ... 1.insert i...

weixin_30654583的博客 428

Codex,Copilot 是什么

GitHub Copilot是什么 **GitHub Copilot** 是一款由 **GitHub** 和 **OpenAI** 合作开发的 **AI 代码辅助工具**,它基于 **OpenAI Codex 技术**,能够根据上下文自动生成代码建议,大幅提升编程效率

ZhangJiqun&191cm&85kg 6808

mysql mssql c#_C#结合MsSql,MySql批量插入不重复数据思路

记得之前面试别人的时候,我问过这样的一个面试题:请写出一条sql语句批量插入100条不重复的数据到sql20008数据库中。也不知道是为啥,好多人就直接写"Insert into tb values(val1,val2,val3,...)",然后再加上一句话:放在循环中。我有点纳闷,呵呵。说真的,如果我一开始没有接触到批量数据操作的时候,我想我也会这么写。其实,这个题目我主要是考察面试人员对"in...

weixin_39853131的博客 273

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

mysql中if not exists的使用

示例一:插入多条记录 INSERT INTO clients (client_id, client_name, client_type) SELECT supplier_id, supplier_name, 'advertising' FROM suppliers WHERE not exists (select * from clients where clients.c

u012686173的专栏 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MySQL异常处理实战:优化重复数据插入的逻辑处理

优化点Python 实现Java 实现异常捕获检查str(e)是否包含捕获事务管理资源释放finally块关闭连接finally块关闭资源批处理优化addBatch()通过本文的优化案例,我们学习了如何在Python和Java中精细化处理MySQL的错误,并执行额外的业务逻辑。精准捕获异常确保事务安全合理优化批处理希望这篇博客能帮助你在实际开发中更好地处理数据库冲突问题!🚀。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

4种SQL中查找重复数据的方法

大家好,数据库中的重复数据可能导致存储成本增加、查询性能下降、分析结果不准确以及数据管理混乱。本文将介绍四种 SQL 技术来检测和处理这些重复数据:使用GROUP BY和HAVING识别重复行的分组,采用诸如ROW_NUMBER()的窗口函数进行高效分析,利用EXISTS操作符检查特定的重复条件,以及执行自连接以比较同一表中的行。本文将讨论某些方法需要唯一标识符的必要性,并提供针对大表的优化技术,例如索引和分区,进而展示如何使用公共表表达式(CTE)结合 ROW_NUMBER() 函数删除重复行。

csdn1561168266的博客 7070

SQL 中查找重复数据的四种方法

本文概述了四种 SQL 技术来检测和处理这些重复数据:使用GROUP BY和HAVING识别重复行的分组,采用诸如ROW_NUMBER()的窗口函数进行高效分析,利用EXISTS操作符检查特定的重复条件,以及执行自连接以比较同一表中的行。SQL 中的EXISTS操作符提供了另一种检查满足特定条件的行是否存在的方法,这使得其在识别重复数据时特别有用。重复数据的存在可能导致以下几个问题。让我们看看如何从表中的完全重复项中删除行,可使用公共表表达式(CTE)和ROW_NUMBER() 函数的组合。

qq_22201881的博客 3647

MySQL + MyBatis 批量插入时存在则忽略或更新记录

一、存在时则忽略 为什么在发现重复时会忽略?这里面涉及到两个地方。 1、重复则忽略。那么首先是需要判断是否重复,这里是通过唯一索引判断是否重复的。如果表中唯一索引的字段已经存在与将要插入的记录行中唯一索引的字段值相同,则标识为重复。 MySQL 中建立唯一索引:ALTER TABLE 'tableName'ADD UNIQUE ('column'); 如下面的代码块中的 ght_repl...

Scott 6192

识别数据库表中重复数据的策略:基于SQL查询分析

在处理数据库时,首先需要确定哪些记录是重复的。这通常通过执行特定的SQL查询来完成。例如,在MySQL数据库中,如果你有一个名为employees的表,并且想要找出所有具有相同email这个查询将返回所有出现超过一次的电子邮件地址及其出现次数。这是识别重复数据的第一步。

master_chenchen的博客 1607

SqlSugar高效批量插入

正确的批量插入策略可以显著提升应用程序的数据处理能力,特别是在数据迁移、日志记录、批量操作等场景中效果尤为明显。

让每一个想学习编程的人,都能学会,都能看懂,看了都有收获! 746

解决数据重复插入问题(sql与锁方法)

解决数据重复插入的sql与锁方案

qq_37431224的博客 6462

oracle常见问题以及MyBatis批量插入数据

mapper层数据 /** * 批量插入工单数据 * * @param workOrders 列表数据 * @return 行数 */ int batchInsert(@Param("list") List<WorkOrder> workOrders); xml层数据 <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="fa

qq_44605317的博客 1411

excel导入功能中去掉重复数据—解决思路

第一种方法也是很容易想到的,不过一定要考虑性能问题,如果导入的数据很多,势必会影响性能,再者即使写这样的方法,尽可能不要改动源代码很大为前提,如写成一个公共方法,直接传入表名和约束的字段名,尽可能的遵循OOP原则,或者直接先处理好当前excel文件,把处理好准备要插入数据库中的数据存入一个List或者其他适合的集合中,最后进行批量的插入,用JDBC或者hibernate或者其他中的批量插入方法,不过这些都不是绝对的,只是一个解决思路,选哪种都要根据情形而定。本人根据情况是采用的第三种方法解决这个问题的。..

weixin_46399670的博客 1993

mysql 防止插入重复数据sql和触发器

这里主要使用了mysql中的虚拟表dual。 有时候我们希望在插入一行新数据前,直接在sql中判断这个数据段的值是不是有重复,比如说插入一个新栏目,判断这个栏目名称是否存在。 表blog_notecolumn id columnname num 1 java 2 2 c 4 有以上一个简单的栏目表,

sujudz的专栏 1万+
上一篇: Wireshark过滤规则
下一篇: MySQL修改时区的三种方式总结
ZWZhangYu
ZWZhangYu 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 497原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZWZhangYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值