9

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

set transaction isolation level read uncommitted

在 SQL Server 中?

4

4 回答 4

15

来自MSDN

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

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

于 2008-08-21T19:28:31.847 回答
6

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

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

于 2008-08-21T19:26:02.727 回答
0

如果您想立即取回数据,则使用它,如果数据正确则不那么
重要

另请查看 sql server 2005 中引入的快照隔离

于 2008-08-21T19:26:44.067 回答
-1

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

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

Select * from table_name with(nolock) 

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

于 2015-12-27T05:25:28.747 回答