请教关于nolock语句
请问nolock语句的作用是可以读取其它语句锁定的数据 还是 在查询时不对所查询的数据加锁?
------解决方案-------------------- 在查询时不对所查询的数据加锁
------解决方案-------------------- 可以读取其它语句锁定的数据
还是 在查询时不对所查询的数据加锁?
其实是一个意思了,
比如读取A数据,A数据被其他回话加锁了,加了nolock之后,可以读到A数据库了
难道不是说可以读取其他语句锁定的数据吗
正常情况下(也就是不加nolock)时
当前会话读取A数据的时候,要对其加共享锁,但是如果发现该数据上已存在排它锁,当前会话被阻塞,无法读取
加了nolock之后,意味着,读取数据时不对A不加共享锁, 此时,不管A上面有什么样的锁,都“阻止”不了当前会话对A的读取
(尽管可能读取到“脏"数据)
------解决方案-------------------- 相当于Read Uncommitted隔离级别 .When you don’t want that readers are acquiring S locks (which isn’t really recommended), you can use the Isolation Level Read Uncommitted.
------解决方案-------------------- 默认隔离级别下对单语句有效
------解决方案-------------------- 引用: 请问nolock语句的作用是可以读取其它语句锁定的数据 还是 在查询时不对所查询的数据加锁?
1)你的查询语句不会加S锁,所以不会阻塞别人
2)别人对你访问的资源虽然加锁了,但不会阻塞你
引用: begin tran
select a1,a2,a3 from table1(nolock),table2(nolock)
where table1.a1=table2.a1 and table1.a1='1234'
update table1 set a1='5678' where a1='1234'
commit tran
如果在同一事务中第一条语句加了nolock(上面语句),那么这个nolock只在第一条语句中有效,还是在这个事务中所有语句都有效?
已经是nolock了 这个作用域 已经没有什么意义了吧
------解决方案-------------------- 加(nolock)相当于read uncommitted, 即查询时不加共享锁, 可能读取到其他进程未提交的数据.
参考 http://technet.microsoft.com/en-us/library/ms187373.aspx
引用: begin tran
select a1,a2,a3 from table1(nolock),table2(nolock)
where table1.a1=table2.a1 and table1.a1='1234'
update table1 set a1='5678' where a1='1234'
commit tran
如果在同一事务中第一条语句加了nolock(上面语句),那么这个nolock只在第一条语句中有效,还是在这个事务中所有语句都有效?
在默认的事务隔离等级下(read committed),这个nolock只在第一条语句中有效.
------解决方案-------------------- 引用: Quote: 引用:
Quote: 引用:
请问nolock语句的作用是可以读取其它语句锁定的数据 还是 在查询时不对所查询的数据加锁?
1)你的查询语句不会加S锁,所以不会阻塞别人
2)别人对你访问的资源虽然加锁了,但不会阻塞你
引用: begin tran
select a1,a2,a3 from table1(nolock),table2(nolock)
where table1.a1=table2.a1 and table1.a1='1234'
update table1 set a1='5678' where a1='1234'
commit tran
如果在同一事务中第一条语句加了nolock(上面语句),那么这个nolock只在第一条语句中有效,还是在这个事务中所有语句都有效?
已经是nolock了 这个作用域 已经没有什么意义了吧
我想知道的事这个nolock对第二条语句是不是起作用?
对第二句没有影响
------解决方案-------------------- 引用: Quote: 引用:
我想知道的事这个nolock对第二条语句是不是起作用?
在默认的事务隔离等级下(read committed),这个nolock对第二条语句不起作用.
在任何隔离级别都与第二句都没啥影响吧
1)本身是nolock 不会产生锁 就没有所谓释放锁的时间
2)第二句该申请什么锁还申请什么锁
我是这么认为的,不知道大家怎么理解的
------解决方案-------------------- 水哥正解,学习了.