假如我现在要在mysql做一些批量的操作,比如批量新增、批量删除。但是我需要在操作完以后知道哪些数据是操作成功/失败的。请问这个要怎么设计呢?直接加事务保证全部成功或者全部失败吗?如果不用事务呢?请大神指教,谢谢。
假如我现在要在mysql做一些批量的操作,比如批量新增、批量删除。但是我需要在操作完以后知道哪些数据是操作成功/失败的。请问这个要怎么设计呢?直接加事务保证全部成功或者全部失败吗?如果不用事务呢?请大神指教,谢谢。
首先看你SQL怎么写,
15 回答8.3k 阅读
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
4 回答4k 阅读
3 回答3.6k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
如果又要性能,又要快速插入,个人感觉只能使用一些简单的策略;
1、
直接循环一条一条插入
,性能肯定是最差的,但是也要看业务是不是会同时插入成百上千条,如果插入的量本来就是在可控范围内的,那么完全可以使用一条一条插入的方法;2、
整体批量插入
,整体批量插入只能返回一个插入成功的数量,如果数量比预期数量少,那说明一定是有一部分失败了,因此在插入的时候最好带一个唯一ID,使用唯一ID,用 in 进行查询,最终得到两者 id 差集,将差集 id 条目再次插入,这里可以使用递归进行,保证最终所有条目插入完成;3、
基于分批次的插入
,假设我们的业务的失败率大概在1%
, 那么我们可以尝试分批次插入,每批10
条, 将这10
条按照上面整体批量插入
的方法进行插入即可,这样即可以防止大面积的反查,也可以保证一定的效率,具体分成几批,每批多少条,要看业务本身而定;