【问题标题】:Isolation Levels - SQL Server隔离级别 - SQL Server
【发布时间】:2018-07-23 10:21:01
【问题描述】:

如果我正在使用

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

我是否需要将查询包装在事务中

例如

BEGIN TRANS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM
T1
COMMIT

或者我可以正常查询吗?

另外,包括 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 和 WITH (NOLOCK) 有什么好处。我知道一个用于表级别,一个用于整个连接级别。但是两者兼得有什么好处吗?

如:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    SELECT * FROM
    T1 WITH (NOLOCK)

【问题讨论】:

  • 考虑到您的声明没有做任何DLLDLM 更改,那么需要BEGINCOMMIT 是没有意义的; COMMIT 没什么。
  • 请注意,每个查询/DML 语句都在事务中运行。但默认情况下,SQL Server 会自动为您提交事务。此外,使用READ UNCOMMITTEDWITH (NOLOCK) 中的任何一个都需要仔细考虑其含义。如果您只是因为有人告诉您它们速度快和/或使用最少的锁而考虑使用它们,请意识到该建议实际上可能是正确的,但完全忽略了锁定和隔离级别的目的

标签: sql sql-server transactions isolation-level


【解决方案1】:

我们总是使用 READ COMMITTED ISOLATION LEVEL 执行 INSERT、UPDATE 和 DELETE 事务的过程。如果我们需要来自任何表的脏数据,那么它会有所帮助。因为 Transaction 是使用 READ COMMITTED 定义的,而 table 在 JOIN Query 中使用 WITH(NOLOCK) 返回脏读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2018-02-02
    • 2011-09-13
    相关资源
    最近更新 更多