3

我想知道在数据库事务中从数据库表中执行读取有什么意义?就我而言,它是 1 个表上的一个单一选择语句。该表可以由其他线程更新。在这种情况下,数据库事务如何帮助我?我无法找到有关此特定案例的信息。

4

1 回答 1

3

事务可以帮助您定义查询和并发更新之间的分离级别。您定义并发更新如何影响您作为结果获得的数据。确保结果中的数据一致性可能很重要。该站点 列出了常见的隔离模式。

  • none:没有事务隔离。

  • read-committed:防止脏读;可能发生不可重复读取和幻读。

  • read-uncommitted:可能发生脏读、不可重复读和幻读。

  • repeatable-read:防止脏读和不可重复读;可能发生幻读。

  • serializable:防止脏读、不可重复读和幻读。

编辑:不可重复读取意味着您将从查询中获得的数据会考虑新提交的数据,因此如果查询执行多次,结果可能会有所不同。脏读与此类似,但您也可以从其他事务中读取未提交的数据。

如果您始终需要一致的数据,您应该只关心隔离。不关心一致性可能听起来很奇怪,但实际上它经常在实际应用程序中以性能为代价。

例如,您在许多网上商店中看到的“x 库存”显示通常是在没有完全隔离的情况下获得的。如果两位顾客尝试购买库存中的最后一件商品,一位将获得最后一件商品,另一位则必须等到商店重新订购该商品。

您如何确定和定义使用的隔离取决于您使用的语言、数据库和框架。例如,在 Hibernate 中,您可以在以下位置设置隔离属性Connection

connection.setTransactionIsolation(Connection.READ_UNCOMMITTED);
于 2013-10-18T08:50:39.177 回答