sql - 隔离级别 - SQL Server
问题描述
如果我正在使用
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)
解决方案
我们总是使用 READ COMMITTED ISOLATION LEVEL 执行 INSERT、UPDATE 和 DELETE 事务的过程。如果我们需要来自任何表的脏数据,那么它会有所帮助。因为事务是使用 READ COMMITTED 定义的,而表在 JOIN 查询中使用 WITH(NOLOCK) 返回脏读。