我想知道在数据库事务中从数据库表执行读取有什么意义?在我的例子中,它是1个表上的一个单独的select语句。其他线程可以更新此表。在这种情况下,数据库事务如何帮助我?我无法找到有关此特定案例的信息。
答案 0 :(得分:3)
该事务可以帮助您定义查询和并发更新之间的分离级别。您可以定义并发更新如何影响您获得的数据。确保结果中的数据一致性可能很重要。 This site列出了常见的隔离模式。
无:没有事务隔离。
读取已提交:阻止了脏读;可以发生不可重复的读取和幻像读取。
read-uncommitted :可能会发生脏读,不可重复的读取和幻像读取。
repeatable-read :防止脏读和不可重复读;可以进行幻像读取。
可序列化:防止脏读,不可重复读和幻像读。
编辑:不可重复的读取意味着您将从查询中获取的数据将新提交的数据考虑在内,因此如果查询执行多次,结果可能会有所不同。脏读是类似的,但您也可以从其他事务中读取未提交的数据。
如果您始终需要一致的数据,您应该只关心隔离。关注一致性可能听起来很奇怪,但它实际上经常用于实际应用中的性能交易。
例如,您在许多网店中看到的'x in stock'显示通常是在没有完全隔离的情况下获得的。如果两个顾客试图购买库存的最后一件商品,一件将获得最后一件商品,另一件商品必须等到商店重新订购商品。
如何确定和定义使用的隔离取决于您使用的语言,数据库和框架。例如,在Hibernate中,您可以在Connection
:
connection.setTransactionIsolation(Connection.READ_UNCOMMITTED);