最近刚换了工作,数据库也换了,看函数的时候发现里面有nolock这个用法,例如:sleect * from table_name with(nolock)
于是搜索了很多,现在做一个总结
nolock:
其实说白了,就是数据库机制不同导致的,
MySQL、Oracle默认情况是不会发生阻塞现象,不会读取脏数据的,也就是说不会出现一行数据不完整的情况
而SqlServer不一样,如果此时有修改数据的发生,那么会进行阻塞,防止读脏,但是这样会导致时间超时,对于大量数据企业很不友好
所以为了避免阻塞现象,允许脏数据的产生,加上nolock来提高效率--一般只适用于select
NOLOCK 语句执行时不发出共享锁,允许脏读 ,等于 READ UNCOMMITTED事务隔离级别 ---参考其他博客

SQLServer 默认情况下一个事务修改了某个值,在这个事务提交前,是阻塞其他连接来读取这个修改中的值的,如果加nolock读取到的是修改后为提交的值(也就是脏读,因为可能这个值最终会回滚)
nolock和with(nolock):
1、SQL05中的同义词,只支持with(nolock);
2、with(nolock)的写法非常容易再指定索引。
3、跨服务器查询语句时不能用with (nolock) 只能用nolock,同一个服务器查询时 则with(nolock)和nolock都可以用
本文介绍了SQL Server中nolock的使用,它用于避免阻塞现象并提高查询效率,允许脏读。在SQL Server中,如果不加nolock,可能会发生阻塞和读取脏数据,而MySQL和Oracle默认不会。nolock与with(nolock)在SQL Server中有相同效果,但with(nolock)在指定索引时更方便。跨服务器查询时只能用nolock。
3330

被折叠的 条评论
为什么被折叠?



