mssql sqlserver 查询关键字nowait(不等待锁查询)


摘要:
下文着重讲述nowait关键字,在sqlserver查询中的用法

当一个表被一个事务占用时,我们此时如果需获取数据,必须使用nolock关键字才能获取表数据,但是此时获取的数据可能是脏数据,
如果此时我们执意要查询一张表时,就会出现锁等待,导致用户客户端反应慢,如果表被锁的时间非常长,那么我们的查询语句,也会出现无止尽的等待,最终由于超时而导致运行失败
对用户体验来说,将会非常糟糕。
——————————————————
如果用户不希望出现脏数据,又不想出现查询等待,那么我们就可以使用nowait关键字

nowait关键字:当查询遇到锁等待,立即返回相应的消息,并终止查询操作。

例:

    
    ---打开窗口A
      /* 窗口A */
create table A(keyId int ,name varchar(20))
go

insert into A(keyID,name)
values(1,'maomao365.com'),
(2,'猫猫小屋')
go

begin tran 

update A set name='test' where keyId =2 
	---打开窗口B

    /* 窗口B */

     select * from A(nowait) 
	 -----输出--------------
	 消息 1222,级别 16,状态 45,第 4 行
已超过了锁请求超时时段。