我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySql批量插入时如何不重复插入数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySql批量插入时如何不重复插入数据

前言

Mysql插入不重复的数据,当大数据量的数据需要插入值时,要判断插入是否重复,然后再插入,那么如何提高效率?解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。

一、insert ignore into

会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过当前插入的这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

控制器方法:



@PostMapping("save")
@ResponseBody
public CommonResult<Employee> save(@RequestBody Employee employee){
    return employeeService.saveEmp(employee);
}

INSERT INTO 插入数据

<!--插入员工数据-->
<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    INSERT INTO t_employee(id, name, age, salary, department_id)
    VALUES (#{id},#{name},#{age},#{salary},#{departmentId})
</insert>

在这里插入图片描述

我们新增一条主键ID为1的员工记录。

当我再发送一次请求的时候,会报SQL语句执行错误,因为主键唯一,并且ID=1的记录已经存在了。

在这里插入图片描述

加上ignore,再次添加一条ID=1的员工记录


INSERT IGNORE INTO

在这里插入图片描述

并没有报错,但是也没有添加成功,忽略了重复数据的添加。

二、on duplicate key update

当主键或者唯一键重复时,则执行update语句。


 ON DUPLICATE KEY UPDATE id = id

我们任然插入ID=1的员工记录,并且修改一下其他字段(age=25):

在这里插入图片描述

查看数据库记录:

在这里插入图片描述

可以看到并没有改变,数据也只有一条,并且返回了成功的提示。

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

扩展:这种方式还有其他业务场景的需求->>>定时更新其他字段。

我们在员工表中,再加入一个时间字段:


private Date updateTime;

在这里插入图片描述

然后我们根据updateTime字段来插入数据:


<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    INSERT INTO t_employee(id, name, age, salary, department_id,update_time)
    VALUES (#{id},#{name},#{age},#{salary},#{departmentId},now())
    ON DUPLICATE KEY UPDATE update_time = now()
</insert>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果插入的时候需要更新其他字段(比如age),该怎么做呢?

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、replace into

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


REPLACE INTO

 <!--插入员工数据-->
<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    REPLACE INTO t_employee(id, name, age, salary, department_id,update_time)
    VALUES (#{id},#{name},#{age},#{salary},#{departmentId},now())
</insert>

在这里插入图片描述

在这里插入图片描述

总结:实际开发中,用得最多的就是第二种方式,进行的批量加。


<!--插入员工数据-->
<insert id="saveEmp" parameterType="java.util.List">
    INSERT INTO t_employee(id, name, age, salary, department_id,update_time)
    VALUES
    <foreach collection="list" item="item" index="index" separator=",">
        (#{item.id},#{item.name},#{item.age},#{item.salary},#{item.departmentId},now())
    </foreach>
    ON DUPLICATE KEY UPDATE id = id
</insert>

控制器:


@PostMapping("save")
@ResponseBody
public CommonResult<Employee> save(@RequestBody List<Employee> employeeList){
    return employeeService.saveEmp(employeeList);
}

在这里插入图片描述

如果存在相同的ID,则不会重复添加。

总结

实际工作中,使用最多的是方法二,根据不同的场景选择不同的方式使用。

到此这篇关于MySql批量插入时如何不重复插入数据的文章就介绍到这了,更多相关MySql不重复插入内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySql批量插入时如何不重复插入数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解MySql如何不插入重复数据

目录1、insert ignore into2、on duplicate key update3、insert ... select ... where not exist4、replace into向数据库的插入值时,需要判断插入是否重复
2023-01-17

sqlite如何批量插入数据

在SQLite中,可以使用INSERT INTO语句以及UNION ALL语法来批量插入数据。以下是一个示例代码:INSERT INTO table_name (column1, column2, column3)SELECT valu
sqlite如何批量插入数据
2024-04-10

MyBatis如何批量插入大量数据

这篇文章将为大家详细讲解有关MyBatis如何批量插入大量数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBa
2023-06-22

在MySQL中如何执行批量插入数据

在MySQL中执行批量插入数据可以使用INSERT INTO语句结合多个值的语法来实现。例如,可以使用以下语法来执行批量插入数据:INSERT INTO table_name (column1, column2, column3, ...
在MySQL中如何执行批量插入数据
2024-04-09

MyBatis如何实现批量插入数据

本文小编为大家详细介绍“MyBatis如何实现批量插入数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“MyBatis如何实现批量插入数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、SQL实现示例假设我们
2023-07-04

python向mySQL批量插入数据的方

通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理。今天用这个函数完成了批量插入例程:def test_insertDB():    conn = database.Connection(h
2023-01-31

mysql批量插入BulkCopy如何实现

这篇文章主要介绍了mysql批量插入BulkCopy如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql批量插入BulkCopy如何实现文章都会有所收获,下面我们一起来看看吧。一、新建项目:SqlS
2023-07-05

【mysql】向mysql数据库批量插入数据(循环)

错误插入  delimiter $$ //以delimiter来标记用$表示存储过程结束create procedure pre()//创建pre()存储方法begindeclare i int;//定义i变量set i=6001;while i<60
2021-08-13

编程热搜

目录