sco*_*ttm 1 sql-server sql-server-2000
IF NOT EXISTS(SELECT * FROM MyTable WITH(nolock) WHERE Key = 'MyKey')
INSERT MyTable(Key) Values('MyKey')
Run Code Online (Sandbox Code Playgroud)
如果表中不存在该值,查询是否会获取锁定?
来自文档:
READUNCOMMITTED和NOLOCK提示仅适用于数据锁.所有查询(包括具有READUNCOMMITTED和NOLOCK提示的查询)在编译和执行期间都会获取Sch-S(模式稳定性)锁.因此,当并发事务在表上持有Sch-M(模式修改)锁时,将阻止查询.例如,数据定义语言(DDL)操作在修改表的模式信息之前获取Sch-M锁.尝试获取Sch-S锁时,任何并发查询(包括使用READUNCOMMITTED或NOLOCK提示的查询)都会被阻止.相反,持有Sch-S锁的查询会阻止尝试获取Sch-M锁的并发事务.有关锁定行为的详细信息,请参阅锁定兼容性(数据库引擎).
因此它不会获取数据锁,但它仍将获得模式稳定性锁.
| 归档时间: |
|
| 查看次数: |
2426 次 |
| 最近记录: |