sql查询语句巧用数据锁代码实例

发布时间:2019-08-11编辑:脚本学堂
有关sql server查询语句中锁的用法,SqlServer查询语句锁怎么用,SQL语句中 with nolock 除了不锁表外,是否能读其他锁住的数据,详见文中实例教程。

Sql Server查询语句锁怎么用?

问题:
sql语句中 with nolock 除了不锁表外,是否能读其他锁住的数据?

解答:
with nolock 除了本身不锁表(不加任何锁) 也不会受其他的已存在的锁影响,锁住的行数据也照样读。

总结下其他的 sqlserver 中的 with锁级别
 

with nolock:无锁
with holdlock:挂一个保持锁
with updlock:挂一个更新锁
with xlock:挂一个排他锁

注意,with nolock 是不能用于update,delete insert  这种更新语句。即with nolock 只能用于select。

例如,
 

update dbo.test with(NOLOCK) set username='wokofo'  --语句是错误的

弹回:
INSERT、UPDATE、DELETE 或 MERGE 语句的目标表不允许使用 NOLOCK 和 READUNCOMMITTED 锁提示。

例子:
 

select top 10 * from dbo.test with(NOLOCK)
select top 10 * from dbo.test with(HOLDLOCK)
select top 10 * from dbo.test with(XLOCK)
select top 10 * from dbo.test with(UPDLOCK)
update dbo.test with(HOLDLOCK) set username='wokofo'
update dbo.test with(XLOCK) set username='wokofo'
update dbo.test with(UPDLOCK) set username='wokofo'