sqlserver 中NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

本文详细解释了 SQL Server 中的锁类型,包括 NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX 的作用和区别,帮助读者理解不同锁类型对事务隔离和并发控制的影响。
sqlserver 中NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
发表于3年前  ⁄ SQL Server  ⁄ 暂无评论 ⁄ 阅读量 3,719
id="cproIframe_u2004926_1" width="336" height="280" src="http://pos.baidu.com/acom?adn=3&at=231&aurl=&cad=1&ccd=24&cec=UTF-8&cfv=17&ch=0&col=zh-CN&conBW=0&conOP=1&cpa=1&dai=1&dis=0&ltr=http%3A%2F%2Fwww.uol123.com%2Ftag%2Fholdlock&ltu=http%3A%2F%2Fwww.uol123.com%2F2012%2F02%2F15%2Fsqlserver-%25E4%25B8%25ADnolock%25E3%2580%2581holdlock%25E3%2580%2581updlock%25E3%2580%2581tablock%25E3%2580%2581tablockx.html&lu_161=0&lunum=6&n=10099028_cpr&pcs=1022x576&pis=10000x10000&ps=234x737&psr=1440x900&pss=1022x244&qn=fb08804cdea6ef0e&rad=&rsi0=336&rsi1=280&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000ff&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=tabcloud_skin_3&stid=5&td_id=2004926&titFF=%E5%AE%8B%E4%BD%93&titFS=12&titTA=left&tn=text_default_336_280&tpr=1427968218421&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u2004926&tt=1427968218400.22.107.110" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 12px; background: transparent;">

NOLOCK(不加锁) 


此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”。 

HOLDLOCK(保持锁) 

此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。 

UPDLOCK(修改锁) 

此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。 

TABLOCK(表锁) 

此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程只能读取而不能修改数据。 

PAGLOCK(页锁) 

此选项为默认选项, 当被选中时,SQL Server 使用共享页锁。 

TABLOCKX(排它表锁) 

此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。 



HOLDLOCK 持有共享锁,直到整个事务完成,应该在被锁对象不需要时立即释放,等于SERIALIZABLE事务隔离级别 

  NOLOCK 语句执行时不发出共享锁,允许脏读 ,等于 READ UNCOMMITTED事务隔离级别 

  PAGLOCK 在使用一个表锁的地方用多个页锁 

  READPAST 让sql server跳过任何锁定行,执行事务,适用于READ UNCOMMITTED事务隔离级别只跳过RID锁,不跳过页,区域和表锁 

  ROWLOCK 强制使用行锁 

  TABLOCKX 强制使用独占表级锁,这个锁在事务期间阻止任何其他事务使用这个表 

  UPLOCK 强制在读表时使用更新而不用共享锁 

注意: 锁定数据库的一个表的区别 

  SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 

  SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值