MySql批量插入时如何不重复插入数据
16lz
2021-12-10
前言
Mysql插入不重复的数据,当大数据量的数据需要插入值时,要判断插入是否重复,然后再插入,那么如何提高效率?解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。
一、insert ignore into
会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过当前插入的这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
控制器方法:
/** * 插入员工数据 */@PostMapping("save")@ResponseBodypublic CommonResult<Employee> save(@RequestBody Employee employee){ return employeeService.saveEmp(employee);}
加上ignore,再次添加一条ID=1的员工记录
INSERT IGNORE INTO
二、on duplicate key update
当主键或者唯一键重复时,则执行update语句。
ON DUPLICATE KEY UPDATE id = id
查看数据库记录:
可以看到并没有改变,数据也只有一条,并且返回了成功的提示。
这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束(在你的业务中那个要作为唯一的判断就将那个字段设置为唯一约束也就是unique key)。
扩展:这种方式还有其他业务场景的需求->>>定时更新其他字段。
我们在员工表中,再加入一个时间字段:
private Date 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>
REPLACE INTO
@PostMapping("save")@ResponseBodypublic CommonResult<Employee> save(@RequestBody List<Employee> employeeList){ return employeeService.saveEmp(employeeList);}
更多相关文章
- [置顶] android 批量插入数据
- [Linux] 批量查看Android应用程序的文件名称;
- android批量获取res文件中的drawable图片
- Eclipse中使用Ant打Android包报错及解决方案
- Windows下git下载android source
- Android批量打包提速 - 1分钟900个市场不是梦
- Android恶意样本批量获取方法
- 用gradle 来打包Android
- Eclipse中使用Ant打Android包报错解决方案 – Perhaps JAVA_HOME