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

 更新时间:2021年06月22日 10:23:26   作者:DT辰白  
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不重复插入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • windows10系统安装mysql-8.0.13(zip安装) 的教程详解

    windows10系统安装mysql-8.0.13(zip安装) 的教程详解

    这篇文章主要介绍了windows10安装mysql-8.0.13(zip安装) 的教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • log引起的mysql不能启动的解决方法

    log引起的mysql不能启动的解决方法

    今天服务器挂了原来服务器的硬盘进行了数据转移 弄到mysql的时候发现里面log日志文件高达900MB
    2008-07-07
  • Mysql 报Row size too large 65535 的原因及解决方法

    Mysql 报Row size too large 65535 的原因及解决方法

    这篇文章主要介绍了Mysql 报Row size too large 65535 的原因及解决方法 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • linux下导入、导出mysql数据库命令的实现方法

    linux下导入、导出mysql数据库命令的实现方法

    下面小编就为大家分享一篇linux下导入、导出mysql数据库命令的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • MySQL锁阻塞的深入分析

    MySQL锁阻塞的深入分析

    这篇文章主要给大家介绍了关于MySQL锁阻塞的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Mysql如何适当的添加索引介绍

    Mysql如何适当的添加索引介绍

    今天小编就为大家分享一篇关于Mysql如何适当的添加索引介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Win 8或以上系统下MySQL最新版5.7.17(64bit ZIP绿色版)安装部署教程

    Win 8或以上系统下MySQL最新版5.7.17(64bit ZIP绿色版)安装部署教程

    这篇文章主要为大家详细介绍了Win 8或以上系统下MySQL最新版5.7.17 64bit ZIP绿色版安装部署教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • mysql存储过程原理与用法详解

    mysql存储过程原理与用法详解

    这篇文章主要介绍了mysql存储过程,结合图文与实例形式较为详细的分析了mysql存储过程基本概念、原理、用法及相关操作注意事项,需要的朋友可以参考下
    2020-04-04
  • MySQL中使用JSON存储数据的实现示例

    MySQL中使用JSON存储数据的实现示例

    本文主要介绍了MySQL中使用JSON存储数据的实现示例,我们可以在MySQL中直接存储、查询和操作JSON数据,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • MySQL实现字符串截取的图文教程

    MySQL实现字符串截取的图文教程

    在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,这篇文章主要给大家介绍了关于MySQL实现字符串截取的相关资料,需要的朋友可以参考下
    2022-03-03

最新评论