SQLServer锁和事务隔离级别

转自:http://www.cnblogs.com/fangrobert/archive/2011/08/17/2136798.html


隔离隔离级别脏读不可重复读幻象说明
未提交读(read uncommitted)如果其他事务更新,不管是否提交,立即执行
提交读(read committed默认)读取提交过的数据。如果其他事务更新没提交,则等待
可重复读(repeatable read)查询期间,不允许其他事务update
可串行读(serializable)查询期间,不允许其他事务insert或delete
请求模式ISSUIXSIXX
意向共享(IS)
共享(S)
更新(U)
意向排它(IX)
与意向排它共享(SIX)
排它(X)


共享锁:为了共享读(select),如果存在事务(一个或多个)拥有对表中数据(关于数据的多少,视的粒度而定)的共享,不允许对定的数据进行更新(update)

排他锁:只能有一个,其他的事务就不能对定的数据获取共享和排他(即排他与共享不能兼容,更多信息请查看兼容性),在此特别强调一下 定的数据。


锁与隔离级别
  型1

  ①     READUNCOMMITTED:不发出

  ②     READCOMMITTED:发出共享,保持到读取结束

  ③     REPEATABLEREAD:发出共享,保持到事务结束

  ④     SERIALIZABLE:发出共享,保持到事务结束

  类型2

  ①     NOLOCK:不发出。等同于READUNCOMMITTED

  ②     HOLDLOCK:发出共享,保持到事务结束。等同于SERIALIZABLE

  ③     XLOCK:发出排他,保持到事务结束。

  ④     UPDLOCK:发出更新,保持到事务事务结束。(更新:不阻塞的事物,允许别的事物数据(即更新可与共享兼容),但他确保自上次取数据后数据没有被更新

  ⑤     READPAST:发出共享,但跳过定行,它不会被阻塞。适用条件:提交隔离级别,行select句中。

  类型3

  ①     ROWLOCK:行级

  ②     PAGLOCK:页级

  ③     TABLOCK:表

  ④     TABLOCKX:表排他


 在SELECT语句中使用XLOCK并不能阻止读。这是因为SQL SERVER在读提交隔离级别上有一种特殊的优化,即检查行是否已被修改,如果未被修改则忽略XLOCK。因为在读提交隔离级别上这确实是可以接受的。

http://support.microsoft.com/kb/324417


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值