本文主要是介绍SqlServer 中 nolock和with(nolock),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近刚换了工作,数据库也换了,看函数的时候发现里面有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
都可以用
这篇关于SqlServer 中 nolock和with(nolock)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!