SQL Server中的"with (nolock)"是什么?
SQL Server中的"with (nolock)"是什么?
有人能够解释一下在查询中使用with (nolock)
的影响吗?在什么情况下可以/不可以使用?
例如,如果你有一个高事务频率和某些表中有大量数据的银行应用程序,在什么类型的查询中可以使用nolock?是否存在必须始终使用它/永远不要使用它的情况?
admin 更改状态以发布 2023年5月20日
问题是什么更糟糕:
- 死锁,还是
- 错误的值?
对于金融数据库,死锁比错误的值严重得多。我知道这听起来很反常,但请听我说。DB事务的传统示例是更新两行,从一个行中减去,再添加到另一个行中。那是错误的。
在金融数据库中,您使用业务交易。这意味着在每个账户中添加一行。这些交易完成并成功写入行是至关重要的。
暂时错误的账户余额并不是什么大不了的事情,这就是日终对账存在的意义。而从账户中透支更有可能是因为同时使用了两台ATM而不是由于数据库中的未提交读取造成的。
话虽如此,SQL Server 2005修复了大部分需要使用NOLOCK
的错误。因此,除非您使用SQL Server 2000或更早版本,否则不需要它。
进一步阅读
行级版本控制