SQL Server-脏读利弊

时间:2020-03-05 18:41:43  来源:igfitidea点击:

为什么我应该或者不应该使用脏读:

set transaction isolation level read uncommitted

在SQL Server中?

解决方案

回答

通常,当我们需要对繁忙的表进行大量(或者频繁)查询时,未提交事务的锁定可能会阻止已提交的读操作,但是只有当我们可以容纳不正确的数据时,才可以进行此操作。

例如,在我最近工作的一个游戏网站上,摘要显示了一些有关最近游戏的统计信息,这些都是基于不正确的阅读,对于我们来说,重要的是包括然后排除尚未提交的交易数据(无论如何,我们知道很少会撤消交易(如果有的话),我们认为平均而言,数据将更准确。

回答

如果我们想立即恢复数据,请使用它,如果正确就不重要了
如果数据对确保数据的正确性很重要,或者我们正在使用数据进行更新,请不要使用

还可以看一下SQL Server 2005中引入的快照隔离

回答

从MSDN:

When this option is set, it is possible to read uncommitted or dirty data; values in the data can be changed and rows can appear or disappear in the data set before the end of the transaction.

简而言之,当我们使用此隔离级别时,并且作为一个事务的一部分对活动表执行多个查询时,不能保证在事务的不同部分中返回给信息将保持不变。我们可以在一个事务中两次查询相同的数据,并获得不同的结果(这种情况可能发生在另一个用户在事务中更新相同数据的情况下)。显然,这会对依赖数据完整性的应用程序部分产生严重影响。