SQL Server - Dirty Reads Pros&缺点

时间:2008-08-21 19:12:59

标签: sql sql-server

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

set transaction isolation level read uncommitted

在SQL Server中?

4 个答案:

答案 0 :(得分:15)

来自MSDN

  

设置此选项后,可以读取未提交或脏的数据;可以更改数据中的值,并且在事务结束之前,行可以在数据集中显示或消失。

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

答案 1 :(得分:6)

通常,当您需要对繁忙的表执行大量(或频繁)查询时,读取提交可能会被来自未提交事务的锁阻塞,但只有当您可以处理不准确的数据时。

作为一个例子,在我最近工作的游戏网站上有一些关于最近游戏的一些统计数据的摘要显示,这都是基于脏读,我们更重要的是包括然后排除交易数据而不是但是我们已经承诺(我们知道很少有交易可以退出),我们觉得平均来说数据会更准确。

答案 2 :(得分:0)

如果您想立即恢复数据,请使用它,如果它是正确的则不是那么重要 如果数据重要正确或者您正在使用它进行更新,请不要使用

另请参阅sql server 2005中引入的快照隔离

答案 3 :(得分:-1)

Thing是你想在提交之前读取数据的时候,我们可以借助set transaction隔离级别读取未提交的数据,数据可能会或者可能不会改变。

我们可以使用查询来读取数据:

Select * from table_name with(nolock) 

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