关于sql中的with(nolock)
Posted slgkaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于sql中的with(nolock)相关的知识,希望对你有一定的参考价值。
一般用于此类语句中:select * from t with(NOLOCK)
nolock是不加锁查询。能够读取被事务锁定的数据,也称为脏读。
说明:
使当前会话的查询,不受其他会话的事务所堵塞。
可是这样做,就读取了其他事务的“改动后未提交的”数据。
也就是同意“READ UNCOMMITTED”
以下举例说明:
在sqlserver中打开一个窗体:
写下例如以下语句:
begin tran update STUDENT set sname=‘111111‘ waitfor delay ‘0:0:10‘ update STUDENT set sname=‘222222‘ commit tran
在sqlserver中打开还有一个窗体:
写下例如以下语句:
select * from student with(nolock)先运行第一个窗体,10秒内运行第二个窗体(最好2秒后。不要太快。由于第一个窗体运行须要一定的时间)
会查询到的结果是sname = ‘111111‘
假设把第二个窗体的sql语句改为:
select * from student则,第二个窗体不会马上返回。他会等到第一个窗体运行完成之后。再进行查询,返回结果sname = ‘222222‘
以上是关于关于sql中的with(nolock)的主要内容,如果未能解决你的问题,请参考以下文章
[SQL SERVER][Performance]小心使用With NoLock
SQL Server 中的“with (nolock)”是啥?
sql With(NoLock),With(ReadPast)