【问题标题】:SQL Server - Dirty Reads Pros & ConsSQL Server - 脏读的优点和缺点
【发布时间】:2010-09-06 10:58:12
【问题描述】:

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

set transaction isolation level read uncommitted

在 SQL Server 中?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

事情是当你想在提交之前读取数据,我们可以借助设置事务隔离级别读取未提交,数据可能会,也可能不会改变。

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

Select * from table_name with(nolock) 

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

【讨论】:

  • 当您链接到第三方网站时请小心,因为这将是 Stack Overflow 的垃圾邮件。相关:How to not be a spammer.
【解决方案2】:

来自MSDN:

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

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

【讨论】:

    【解决方案3】:

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

    还可以看看 sql server 2005 中引入的快照隔离

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-19
        • 2011-02-10
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 2010-12-06
        相关资源
        最近更新 更多