Mag*_*ier 3 sql-server sql-server-2008-r2 isolation-level nolock
我运行了以下查询:
SELECT session_id,CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL
FROM sys.dm_exec_sessions
Where transaction_isolation_level = 4
Run Code Online (Sandbox Code Playgroud)
进而:
DBCC INPUTBUFFER(157)
Run Code Online (Sandbox Code Playgroud)
其中 157 是先前的 session_id 之一,以查看查询编号之一的结果的语句。1.
它显示了以下内容:
(@ID uniqueidentifier) SELECT * FROM PS WITH (NOLOCK) WHERE ID = @ID
如何使用WITH (NOLOCK)隔离级别 Serializable 运行语句?有什么“覆盖”的With (NOLOCK)吗?
锁定提示与隔离级别正交。虽然他们解决类似的担忧,增加了锁提示并不会改变隔离级别。您的交易仍将是“可序列化”的交易。当然,锁定提示使查询操作本身违反了事务的可序列化性,但是您正在查看事务的一个属性。
您的查询正在报告事务隔离级别的会话级别设置,该级别设置为可序列化。
使用NOLOCK提示(或其同义词READUNCOMMITTED)会覆盖会话隔离级别,以访问指定提示所针对的特定对象(在本例中为表)。
因此,事务仍然在可序列化隔离下运行,但对表 PS 的访问将使用READUNCOMMITTED隔离语义执行。
文档:
相关阅读:
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |