微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLServer锁和事务隔离级别

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


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐