关于SQL Server:SQL Server-脏读专家

关于SQL Server:SQL Server-脏读专家

SQL Server - Dirty Reads Pros & Cons

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

1
SET TRANSACTION isolation level READ uncommitted

在SQL Server中吗?


来自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.

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


通常,当您需要对繁忙的表进行较大(或频繁)的查询时,未提交的事务可能会被锁阻止已提交的读取,但只有当您可以容纳不正确的数据时,才进行。

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


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

还请看一下SQL Server 2005中引入的快照隔离。


事情是当您想在提交之前读取数据时,我们可以借助设置事务隔离级别读取未提交的方式来进行操作,数据可能会更改,也可能不会更改。

我们可以通过查询来读取数据:

1
SELECT * FROM TABLE_NAME WITH(nolock)

这仅适用于读取未提交的隔离级别。


推荐阅读