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

作者:DT辰白 时间:2024-01-29 04:42:00 

前言

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>

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

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

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

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

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


INSERT IGNORE INTO

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

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

二、on duplicate key update

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


ON DUPLICATE KEY UPDATE id = id

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

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

查看数据库记录:

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

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

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

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

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


private Date updateTime;

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

然后我们根据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>

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

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

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

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

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

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

三、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>

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

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

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


<!--插入员工数据-->
<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);
}

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

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

来源:https://blog.csdn.net/qq_41107231/article/details/117911314

标签:MySql,不重复,插入
0
投稿

猜你喜欢

  • Python将文本去空格并保存到txt文件中的实例

    2021-06-14 05:01:42
  • 详解Python如何批量检查图像是否可用

    2021-10-03 13:42:07
  • 微软SQLServer密码管理的危险判断

    2008-11-24 17:34:00
  • python 使用 requests 模块发送http请求 的方法

    2021-06-02 17:29:19
  • Python挑选文件夹里宽大于300图片的方法

    2023-08-13 11:35:19
  • Puppeteer环境搭建的详细步骤

    2024-05-13 09:58:56
  • Python基于滑动平均思想实现缺失数据填充的方法

    2021-10-20 12:36:02
  • python 实现弹球游戏的示例代码

    2022-04-08 20:06:42
  • python中文分词,使用结巴分词对python进行分词(实例讲解)

    2023-03-15 13:37:30
  • PHP基于openssl实现非对称加密代码实例

    2023-07-13 05:38:22
  • Vue3中简单实现动态添加路由

    2023-07-02 16:58:45
  • Python按钮的响应事件详解

    2023-12-24 15:35:08
  • ORACLE 如何查询被锁定表及如何解锁释放session

    2023-07-02 11:59:39
  • Pytorch模型迁移和迁移学习,导入部分模型参数的操作

    2021-08-05 09:18:16
  • 详解使用vue脚手架工具搭建vue-webpack项目

    2024-05-21 10:29:19
  • MySQL中使用replace、regexp进行正则表达式替换的用法分析

    2024-01-15 13:34:02
  • python密码错误三次锁定(实例讲解)

    2022-03-02 07:51:23
  • Python实现一行代码自动绘制艺术画

    2021-03-26 00:32:54
  • Python使用scrapy采集数据时为每个请求随机分配user-agent的方法

    2023-02-08 15:20:31
  • ASP实现表单中容量大的数据的提交方法

    2008-10-16 11:07:00
  • asp之家 网络编程 m.aspxhome.com