为了账号安全,请及时绑定邮箱和手机立即绑定

SQLServer中的“With(Nolock)”是什么?

SQLServer中的“With(Nolock)”是什么?

猛跑小猪 2019-07-26 15:14:57
SQLServer中的“With(Nolock)”是什么?有人能解释一下使用with (nolock)在查询中,什么时候应该/不应该使用它?例如,如果您有一个具有高交易率的银行应用程序,以及某些表中的大量数据,那么在哪种类型的查询中可以使用nolock?在某些情况下,你应该经常使用它/永远不要使用它?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

With(NOLOCK)相当于使用Read unCommated作为事务隔离级别。因此,您有可能读取随后回滚的未提交行,即从未将其放入数据库的数据。因此,虽然它可以防止其他操作导致读取陷入僵局,但也会带来风险。在一个高交易率的银行应用程序中,它可能不是你试图用IMHO解决的任何问题的正确解决方案。



查看完整回答
反对 回复 2019-07-27
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

问题是,更糟糕的是:

  • 死锁,或
  • 一个错误的价值?

对于金融数据库来说,死锁远比错误的价值更糟糕。我知道这听起来倒像,但听我说完。DB事务的传统示例是更新两行,从一行减去另一行。这是错误的。

在金融数据库中,您使用业务事务。这意味着向每个帐户添加一行。最重要的是完成这些事务并成功地写入行。

暂时把账户余额弄错并不是什么大不了的事,这就是一天结束时对账的目的。而且,帐户透支的可能性要大得多,因为同时使用了两个ATM机,而不是数据库中未提交的读取。

也就是说,SQLServer 2005修复了大多数导致NOLOCK是必要的。因此,除非您使用的是SQLServer 2000或更高版本,否则不应该需要它。

再读
行级版本控制



查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 492 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信