A 您所在的位置:网站首页 mysql2000万数据一次性更新 A

A

2023-05-19 17:18| 来源: 网络整理| 查看: 265

Java - 数据的批量新增&更新 环境准备 create table user ( id bigint auto_increment primary key, username varchar(32) not null comment '登录账户', nickname varchar(32) not null comment '昵称', sex char(1) not null comment '性别:0-男;1-女', password varchar(255) not null comment '密码' ) comment '用户表' auto_increment = 1; MyBatis foreach insert into user(id,username, nickname, sex, password) values (#{user.id},#{user.username}, #{user.nickname}, #{user.sex}, #{user.password} public interface UserMapper{ void insertUserBatch(@Param("users") List users); }

这种方式实质上就是sql的拼接,好处是只需要连接一次数据库。但是这种方式有限制,批量操作只能是新增或者修改,不能实现不存在的新增、存在的修改。

MyBatis foreach + MySQL DUPLICATE

这里主要说的是DUPLICATE ,简单来说,它可以通过判断唯一索引是否冲突来实现数据的新增或更新。即插入的数据引起了唯一索引冲突那么这条数据则进行更新,若未引起则进行新增操作。

insert into user(id,username, nickname, sex, password) values (#{user.id},#{user.username}, #{user.nickname}, #{user.sex}, #{user.password} on duplicate key update nickname = values(nickname), sex = values(sex), password = values(password)

这种方式可以实现批量数据的同时新增与更新操作。但是有使用限制:判断字段必须存在唯一索引

MyBatisPlus saveOrUpdateBatch

首先需要在项目中集成 MP 相关环境,可以参考官网:https://www.baomidou.com/

saveOrUpdateBatch方法是先根据主键去查询,若不存在则新增,若存在则修改。所以它的限制就是:只能根据主键来判断新增或修改

MyBatis foreach + MySQL REPLACE

replace 也是 MySQL 提供的一个语法,用来新增数据时检查是否有主键或索引冲突,若有则先删除原来记录,在执行插入新的数据。

replace insert into user(id,username, nickname, sex, password) values (#{user.id},#{user.username}, #{user.nickname}, #{user.sex}, #{user.password} 注意 replace 和 duplicate 这两种方式在大数据量的环境下,插入效率都略低。其次若使用主键作为判断字段时,replace 要比 duplicate 慢的多。 replace 会先删除数据、再新增数据,期间还需要重新未付索引的变化duplicate则不会改变现有的索引结构,对索引的维护成本低


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有