【发布时间】: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)
【问题讨论】:
-
考虑到您的声明没有做任何
DLL或DLM更改,那么需要BEGIN和COMMIT是没有意义的;COMMIT没什么。 -
请注意,每个查询/DML 语句都在事务中运行。但默认情况下,SQL Server 会自动为您提交事务。此外,使用
READ UNCOMMITTED或WITH (NOLOCK)中的任何一个都需要仔细考虑其含义。如果您只是因为有人告诉您它们速度快和/或使用最少的锁而考虑使用它们,请意识到该建议实际上可能是正确的,但完全忽略了锁定和隔离级别的目的。
标签: sql sql-server transactions isolation-level