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

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

有人能解释一下使用with (nolock)在查询中,什么时候应该/不应该使用它?

例如,如果您有一个具有高交易率的银行应用程序,以及某些表中的大量数据,那么在哪种类型的查询中可以使用nolock?在某些情况下,你应该经常使用它/永远不要使用它?



猛跑小猪
浏览 493回答 3
3回答

隔江千里

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

叮当猫咪

问题是,更糟糕的是:死锁,或一个错误的价值?对于金融数据库来说,死锁远比错误的价值更糟糕。我知道这听起来倒像,但听我说完。DB事务的传统示例是更新两行,从一行减去另一行。这是错误的。在金融数据库中,您使用业务事务。这意味着向每个帐户添加一行。最重要的是完成这些事务并成功地写入行。暂时把账户余额弄错并不是什么大不了的事,这就是一天结束时对账的目的。而且,帐户透支的可能性要大得多,因为同时使用了两个ATM机,而不是数据库中未提交的读取。也就是说,SQLServer 2005修复了大多数导致NOLOCK是必要的。因此,除非您使用的是SQLServer 2000或更高版本,否则不应该需要它。再读行级版本控制
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server