代码之家  ›  专栏  ›  技术社区  ›  Seibar

SQL Server-脏读优缺点

  •  9
  • Seibar  · 技术社区  · 17 年前

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

    set transaction isolation level read uncommitted
    

    在SQL Server中?

    4 回复  |  直到 9 年前
        1
  •  15
  •   Yaakov Ellis NevilleDNZ    17 年前

    MSDN :

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

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

        2
  •  6
  •   Brian R. Bondy    17 年前

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

    例如,在我最近工作的一个游戏网站上,有一个关于最近游戏的一些统计数据的摘要显示,这些数据都是基于脏的读取,对我们来说,更重要的是包括然后排除尚未提交的事务数据(我们知道,如果有事务,很少会被取消),我们觉得平均来说,数据这样会更准确。

        3
  •  0
  •   SQLMenace    17 年前

    如果你想马上返回数据,就使用它,如果它是正确的,就不那么重要了
    如果数据对于正确性很重要或正在进行更新,则不要使用

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

        4
  •  -1
  •   Remi Guan cdlane    9 年前

    问题是,当您想要在提交之前读取数据时,我们可以在set transaction isolation level read uncommitted的帮助下完成,数据可能会更改,也可能不会更改。

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

    Select * from table_name with(nolock) 
    

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