首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQLServer锁跟事务隔离级别

2012-07-28 
SQLServer锁和事务隔离级别转自:http://www.cnblogs.com/fangrobert/archive/2011/08/17/2136798.html隔离

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


热点排行