springboot在mysql里批量操作数据的一个问题。

假如我现在要在mysql做一些批量的操作,比如批量新增、批量删除。但是我需要在操作完以后知道哪些数据是操作成功/失败的。请问这个要怎么设计呢?直接加事务保证全部成功或者全部失败吗?如果不用事务呢?请大神指教,谢谢。


回答:

如果又要性能,又要快速插入,个人感觉只能使用一些简单的策略;

1、直接循环一条一条插入,性能肯定是最差的,但是也要看业务是不是会同时插入成百上千条,如果插入的量本来就是在可控范围内的,那么完全可以使用一条一条插入的方法;

2、整体批量插入,整体批量插入只能返回一个插入成功的数量,如果数量比预期数量少,那说明一定是有一部分失败了,因此在插入的时候最好带一个唯一ID,使用唯一ID,用 in 进行查询,最终得到两者 id 差集,将差集 id 条目再次插入,这里可以使用递归进行,保证最终所有条目插入完成;

3、基于分批次的插入,假设我们的业务的失败率大概在 1%, 那么我们可以尝试分批次插入,每批 10 条, 将这 10 条按照上面 整体批量插入 的方法进行插入即可,这样即可以防止大面积的反查,也可以保证一定的效率,具体分成几批,每批多少条,要看业务本身而定;


回答:

首先看你SQL怎么写,

  1. 比如拿insert举例 你是insert into table (...) values 后面使用循环添加插入的数据那么这种是要么成功要么失败,
  2. 如果是先循环,内部进行insert into ,这种就存在有成功的有失败的.
    不推荐第2种写法
    但是springboot 添加@Transactional后如果一条添加失败报错,那么会全部回滚

以上是 springboot在mysql里批量操作数据的一个问题。 的全部内容, 来源链接: utcz.com/p/944108.html

回到顶部