【发布时间】:2021-03-09 14:41:25
【问题描述】:
我在遗留项目中使用 juste main 方法开发了一批:java 7、hibernate 和 Spring 使用 mysql 数据库。
在这批中,我想更新一个包含超过 5000 万行的表中的几行。 当我每天开始批处理时,我必须更新至少 10000 行。
那么,在mysql中不锁定表的情况下更新行的最佳方法是什么?
只需像这样做一个查询:
update table items set is_achive = true where id in (id1,id2,id3....id10000)
或者像这样使用 for 循环:
for(item p : ItemsList){
update table item set is_achive = true where id = p.id
}
【问题讨论】:
-
Hibernate 会为您批量更新,但您可能会遇到其他问题(例如内存使用),最好先尝试哪种方法更容易编写,并在发现问题时解决问题
-
不要忘记启动事务,如果更新必须是原子的。否则,如果在运行过程中出现异常或错误,您可能会得到部分更新。
标签: java mysql spring hibernate