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):

1SQL05中的同义词,只支持with(nolock);

2with(nolock)的写法非常容易再指定索引。

3、跨服务器查询语句时不能用with (nolock) 只能用nolock,同一个服务器查询时 with(nolock)nolock都可以用

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值