SQL Server中的"with (nolock)"是什么?

32 浏览
0 Comments

SQL Server中的"with (nolock)"是什么?

有人能够解释一下在查询中使用with (nolock)的影响吗?在什么情况下可以/不可以使用?

例如,如果你有一个高事务频率和某些表中有大量数据的银行应用程序,在什么类型的查询中可以使用nolock?是否存在必须始终使用它/永远不要使用它的情况?

admin 更改状态以发布 2023年5月20日
0
0 Comments

问题是什么更糟糕:

  • 死锁,还是
  • 错误的值?

对于金融数据库,死锁比错误的值严重得多。我知道这听起来很反常,但请听我说。DB事务的传统示例是更新两行,从一个行中减去,再添加到另一个行中。那是错误的。

在金融数据库中,您使用业务交易。这意味着在每个账户中添加一行。这些交易完成并成功写入行是至关重要的。

暂时错误的账户余额并不是什么大不了的事情,这就是日终对账存在的意义。而从账户中透支更有可能是因为同时使用了两台ATM而不是由于数据库中的未提交读取造成的。

话虽如此,SQL Server 2005修复了大部分需要使用NOLOCK的错误。因此,除非您使用SQL Server 2000或更早版本,否则不需要它。

进一步阅读
行级版本控制

0
0 Comments

使用 WITH (NOLOCK) 相当于将事务隔离级别设为 READ UNCOMMITED。因此,您可能会读取到被回滚的未提交行,即从未进入数据库的数据。虽然它可以防止读操作被其他操作死锁,但它也带有风险。在高交易率的银行应用程序中,我认为这可能不是您尝试使用它解决问题的正确解决方案。

0