SqlServer中的更新锁(UPDLOCK)

转载 2016年11月17日 17:03:35

SqlServer中的更新锁(UPDLOCK)

2013-01-24 10:49 by 假面Wilson, 3503 阅读, 1 评论, 收藏编辑

UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加上锁的记录在其它的线程中是不能更改的只能等本线程的事务结束后才能更改.

示例:

测试:

在另一个查询里:

BEGIN TRANSACTION

SELECT * FROM myTable WITH (UPDLOCK) WHERE Id in (1,2,3)

waitfor delay '00:00:10' 


update myTable set [Name]='ZZ' where Id in (1,2,3)
commit TRANSACTION

在另一个查询里:
SELECT * FROM myTable WHERE Id in (1,2,3)

可以马上查询到数据。

但如果要更新数据,必须等其他更新锁释放后才能执行。

update myTable set [Name]='ZZ' where Id in (1,2,3)


这就说明,有时候需要控制某条记录在我读取后就不许再进行更新,那么我就可以将所有要处理当前记录的查询都加上更新锁,以防止查询后被其它事务修改.将事务的影响降低到最小

我认为写的最好的关于SQL Server更新锁和排它锁了

转载至:http://blog.csdn.net/zjcxc/article/details/27351779 一直没有认真了解UPDATE操作的锁,最近在MSDN论坛上看到一个问题,询问堆表更...
  • u010523770
  • u010523770
  • 2016年11月18日 11:19
  • 2840

sql server锁知识及锁应用

sql server锁(lock)知识及锁应用 一 关于锁的基础知识 二 锁的分析及应用系列 三 SQL Server 锁机制 悲观锁 乐观锁 实测解析 四 SQL Server 中WITH NOLO...
  • huwei2003
  • huwei2003
  • 2017年04月01日 18:30
  • 27386

sql server中高并发情况下 同时执行select和update语句死锁问题 (一)

最近在项目上线使用过程中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁。通常我们知道如果两个事务同时对一个表进行插入或修改数据,会发生在请求对表的X锁时,已经被对方持有了。...
  • lishehe
  • lishehe
  • 2014年12月31日 00:39
  • 29916

sqlserver高并发情况下 select 和update操作造成死锁的解决方法

最近在项目上线使用过程中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁。通常我们知道如果两个事务同时对一个表进行插入或修改数据,会发生在请求对表的X锁时,已经被对方持有了。...
  • u013547384
  • u013547384
  • 2016年12月16日 09:14
  • 3832

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

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

postgresql的update锁等待

--当update语句执行时,如果其可以获得锁其会首先获得一个排它锁 ExclusiveLock --在session 1 中 开启一个事务 postgres=# begin; BEGIN post...
  • jumewo
  • jumewo
  • 2015年10月19日 16:55
  • 1614

数据库锁机制

1 前言 数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T...
  • samjustin1
  • samjustin1
  • 2016年08月15日 12:38
  • 24962

SQL SERVER中UPDLOCK ,READPAST使用

SQL SERVER中获取不重复数据:select top 1 * from orders with(UPDLOCK ,READPAST,RowLock) where Id=1 READPAST ...
  • fuyifang
  • fuyifang
  • 2015年07月29日 22:03
  • 2776

SqlServer的更新锁(UPDLOCK)

UPDLOCK读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。...
  • hbxtlhx
  • hbxtlhx
  • 2005年08月27日 09:28
  • 3555

数据库 for update 锁表的问题

Oracle 的for update行锁 键字: oracle 的for update行锁    SELECT...FOR UPDATE 语句的语法如下:    SELECT ... FOR UP...
  • fayeyiwang
  • fayeyiwang
  • 2016年03月31日 13:08
  • 6384
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SqlServer中的更新锁(UPDLOCK)
举报原因:
原因补充:

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