我正在尝试编写一些查询来从数据库中获取数据.我曾经使用With(NoLock)来阻止SQL Server在数据库上放置共享锁.最近,我的一位朋友告诉我,现在的默认行为是它不会对读取数据施加任何锁定.
但是,我找不到一个干净的解释.我还应该在SQL Server中使用With(NoLock)吗?
WITH (NOLOCK)行为与设置事务隔离级别相同READ UNCOMMITTED,只是其范围不同.
但是,请记住,根据您运行的查询类型,允许SQL Server使用不同的隔离级别.(INSERT,UPDATE,DELETE和其他写操作必须至少运行READ COMMITTED).
您的朋友不对,SQL Server将在对表的读操作期间至少获取模式锁,以防止更改表的结构.即使您使用READ UNCOMMITTED隔离级别或WITH (NOLOCK)提示,此锁也将应用于表.
一般来说,我会避免使用WITH (NOLOCK)提示.使用表提示时,您可以减少控制.READ UNCOMMITTED如果可以接受脏读,请使用隔离级别进行连接.
您始终可以更改连接的隔离级别,但不能动态删除WITH (NOLOCK)提示.当您WITH (NOLOCK)在每个表上使用时尤其如此.
| 归档时间: |
|
| 查看次数: |
2321 次 |
| 最近记录: |