0
点赞
收藏
分享

微信扫一扫

大数据量数据,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>

大数据量数据,MySql批量插入时,如何不插入重复的数据?_大数据 我们新增一条主键ID为1的员工记录。


如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!​​[Java架构群]​​ 群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。


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

大数据量数据,MySql批量插入时,如何不插入重复的数据?_java_02加上ignore,再次添加一条ID=1的员工记录

INSERT IGNORE INTO

大数据量数据,MySql批量插入时,如何不插入重复的数据?_mysql_03 并没有报错,但是也没有添加成功,忽略了重复数据的添加。

二、on duplicate key update


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


ON DUPLICATE KEY UPDATE id = id

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

大数据量数据,MySql批量插入时,如何不插入重复的数据?_java_04

查看数据库记录:

大数据量数据,MySql批量插入时,如何不插入重复的数据?_java_05

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

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

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

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

private Date updateTime;

大数据量数据,MySql批量插入时,如何不插入重复的数据?_大数据_06

然后我们根据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_07大数据量数据,MySql批量插入时,如何不插入重复的数据?_编程语言_08大数据量数据,MySql批量插入时,如何不插入重复的数据?_数据库_09如果插入的时候需要更新其他字段(比如age),该怎么做呢?

大数据量数据,MySql批量插入时,如何不插入重复的数据?_数据库_10大数据量数据,MySql批量插入时,如何不插入重复的数据?_mysql_11大数据量数据,MySql批量插入时,如何不插入重复的数据?_数据库_12

三、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批量插入时,如何不插入重复的数据?_java_13大数据量数据,MySql批量插入时,如何不插入重复的数据?_java_14 总结:实际开发中,用得最多的就是第二种方式,进行的批量加。

<!--插入员工数据-->
<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批量插入时,如何不插入重复的数据?_mysql_15 如果存在相同的ID,则不会重复添加。

总结

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

最后

以下是Java面试1—到5年以上开发必问到的面试问点,也都是一线互联网公司Java面试必备技能,下面是​参照阿里年薪50W所需具备的技能图​,大家可以参考下!

大数据量数据,MySql批量插入时,如何不插入重复的数据?_数据库_16


同时针对这12个技能,我在这整理了一份Java架构进阶面试专题PDF文档(含450题解析,包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发,设计模式,MySQL等知识点解析,内容丰富,图文结合!)


大数据量数据,MySql批量插入时,如何不插入重复的数据?_java_17

这份专题文档是免费分享的,有需要的朋友可以看向下面来获取!!


需要完整版文档的小伙伴,可以一键三连,下方获取免费领取方式!




举报

相关推荐

0 条评论