如果需要,在一个会话中
// make a query on Foo table to get one instance
// update this instance
// commit() or not?
// make the same query on Foo table
在这两个查询中我将得到相同的结果吗?也就是说,是否有必要在单个会话中的表查询之前提交更新?
谢谢!
答案 0 :(得分:1)
在再次进行查询之前不必提交。通常,事务(会话)中的更新对于同一事务中的后续查询(甚至在提交之前)都是可见的。
已经说过,在一个事务中两次执行相同的确切查询可能是“代码异味”。值得考虑的是,由于更新的对象已经是内存,是否真的有必要再次查询该对象?
此外,根据database isolation level,不能保证第二个查询返回与第一个查询相同的结果集。如果另一个事务在第二次查询之前修改了数据,则会发生这种情况。
答案 1 :(得分:1)
不必执行两次提交,因为每个事务对于数据库中的后续操作(或查询)都是可见的。
尽管我不确定多个提交是否会影响运行时,但您只能将提交放在最后。