在单个会话中,如果我想:
// make a query on Foo table to get one instance
// update this instance
// commit() or not?
// make the same query on Foo table
在这两个查询中,我会得到相同的结果吗?也就是说,在单个会话中对表进行查询之前,是否有必要提交更新?
谢谢!
再次进行查询之前,无需提交。作为一般原则,事务(会话(中的更新对同一事务中的后续查询可见,甚至在提交之前也是如此。
话虽如此,在事务中执行两次相同的确切查询可能是"代码气味"。 值得考虑的是,既然更新的对象已经是内存,真的有必要再次查询对象吗?
此外,根据数据库隔离级别,不保证第二个查询返回与第一个查询相同的结果集。 如果另一个事务在第二个查询之前修改了数据,则可能会发生这种情况。
没有必要同时执行两次提交,因为每个事务对数据库中的后续操作(或查询(都是可见的。
您可以将提交放在末尾,尽管我不确定多个提交是否会影响运行时。