【问题标题】:Sql Server Isolation level Read Uncommitted is lockingSql Server 隔离级别 Read Uncommitted 被锁定
【发布时间】:2015-03-04 09:41:48
【问题描述】:

我将隔离级别定义为READ UNCOMMITTED,因为这是在几个表上长时间运行的进程,并且不存在脏读风险,因为我只是插入新数据。

根据我的理解,因为我使用的是这个隔离级别,我应该能够从我正在插入行但我不能执行的表中执行 SELECT 语句,它会被阻止。

为什么这个隔离级别会阻塞SELECT 语句?

它应该允许查询这些表,并且在最坏的情况下,检索脏数据。

以防万一,我正在使用CURSOR(我知道,我也讨厌他们,但我没有编写这段代码)处理非常大的数据和多个表。

【问题讨论】:

  • 如果您添加查询和执行计划会有所帮助.....
  • READ UNCOMMITTED 在执行插入的连接上不会阻止选择的阻塞。运行SELECT 语句的连接需要READ UNCOMMITTED 隔离级别。最坏的情况不仅仅是脏数据;数据可能完全丢失或重复。

标签: sql sql-server cursor locking isolation-level


【解决方案1】:

当您执行插入操作时(不管隔离级别是什么),就会发生锁定。如果不进行一些锁定,就无法插入行。隔离级别会影响阅读。

如果您使用 (nolock) 执行 select * from tablea,您将读取未提交的行,但会在短时间内(由于插入)发生锁定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2018-06-27
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    相关资源
    最近更新 更多