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)也将等待前者结束才执行...
  • donghaima
  • donghaima
  • 2009年11月09日 11:47
  • 2937

sqlserver 中NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

 NOLOCK(不加锁)  此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或...
  • fengsuifeng___
  • fengsuifeng___
  • 2016年07月04日 13:03
  • 1087

有关数据库 行 锁 的几个问题(rowlock) 行锁的基本说明: SELECT au_lname FROM authors WITH (NOLOCK) 锁定提示

有关数据库 行 锁 的几个问题(rowlock) 行锁的基本说明: SELECT au_lname FROM authors WITH (NOLOCK) 锁定提示    ...
  • evilcry2012
  • evilcry2012
  • 2015年04月03日 09:41
  • 427

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

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

sqlserver 锁表语句以及解锁语句

锁定数据库的一个表  SELECT * FROM table WITH (HOLDLOCK)  注意: 锁定数据库的一个表的区别  SELECT * FROM table...
  • LazyLeland
  • LazyLeland
  • 2013年11月29日 10:03
  • 14719

转自高手关于SQL 锁的叙述。。(nolock,rowlock,tablock,xlock,paglock)

转自高手关于SQL 锁的叙述。。(nolock,rowlock,tablock,xlock,paglock)  亲爱哒牛哞哞儿 2013-02-20 11:37:12 锁的概述 ...
  • evilcry2012
  • evilcry2012
  • 2015年04月02日 15:22
  • 385

有关数据库 行 锁 的几个问题(rowlock)

有关数据库 行 锁 的几个问题(rowlock) 行锁的基本说明: SELECT au_lname FROM authors WITH (NOLOCK) 锁定提示  ...
  • evilcry2012
  • evilcry2012
  • 2016年07月01日 12:10
  • 1515

sqlserver提供的表级锁

sqlserver所指定的表级锁定提示有如下几种 1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。 2. NOLOCK:不添加共享锁和排它锁,...
  • sunqing0316
  • sunqing0316
  • 2014年12月30日 00:07
  • 1030

SQL Server进程死锁

SQL Server遇到错误“事务(进程 ID 144)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。”之前也遇到过,上次没解决,这次再看看。既然出现“死...
  • daiqianjie
  • daiqianjie
  • 2015年02月27日 16:16
  • 623

视图后面加with(nolock)后

原文出处:http://www.cnblogs.com/ASPNET2008/archive/2012/02/09/2343538.html       一些小的企业项目,往往存在很多局限性...
  • chelen_jak
  • chelen_jak
  • 2013年01月25日 10:33
  • 1741
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL中的锁:NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
举报原因:
原因补充:

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