SQL中的锁:NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

转载 2015年11月17日 20:45:22

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) 其他事务不能读取表,更新和删

相关文章推荐

with(tablockx)的测试

 with(tablockx)和普通的SELECTwith(tablockx)先执行,普通的SELECT将等待前者完成.普通的SELECT先执行,  with(tablockx)也将等待前者结束才执行...

SQL秘笈 : NOLOCK、ROWLOCK、UPDLOCK的使用!

NOLOCK的使用   NOLOCK可以忽略锁,直接从数据库读取数据。这意味着可以避开锁,从而提高性能和扩展性。但同时也意味着代码出错的可能性存在。你可能会读取到运行事务正在处理的无须验证的未递交数...
  • ufocode
  • ufocode
  • 2015年11月17日 20:40
  • 2416

了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的使用

锁争用的描述 那些不仅仅使用行级锁的数据库使用一种称为混和锁(lock escalation)的技术来获取较高的性能。除非很明确知道是针对整个数据表,否则这些数据库的做法是开始使用行级锁, 然后随...

SQL Server 2008 with(nolock)的使用原因及数据库锁,隔离级别简介

首先先要了解并发访问:同一时间有多个用户访问同一资源,并发用户中如果有用户对资源做了修改,此时就会对其它用户产生某些不利的影响,例如: 1:脏读,一个用户对一个资源做了修改,此时另外一个用户正好读取...

SQL Server 中WITH (NOLOCK)浅析(大自然的搬运工)

概念介绍    开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种。它等同于 READUNCOMMITTED 。 具体的...
  • DXB601
  • DXB601
  • 2017年06月20日 08:13
  • 264

sql查询,nolock写还是不写,这是一个问题

在做过的很多项目中,发现大家不管对什么表,逢select必定加上nolock(或者with(nolock)),好像已经是制度化的一种东西。有领导高人解释说加上nolock可以提高查询速度,不影响对数据...

SQL 2005 with(nolock)详解

大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的。   什么是并发访问:同一时间有多个用户访问同一资...

SQL Server 中的 NOLOCK 到底是什么意思

SQL Server 中的 NOLOCK 到底是什么意思? (2011-04-27 16:18:31) 转载▼  以前遇到过,但仅限于听同事说...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL中的锁:NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
举报原因:
原因补充:

(最多只允许输入30个字)