SqlServer中的更新锁(UPDLOCK)

UPDLOCK优点与应用场景
UPDLOCK在数据库事务中的应用,允许读取数据而不阻塞其他事务,并确保数据的一致性。通过示例展示了如何使用UPDLOCK锁定记录以防止其他事务修改,及其在事务内的读取后不允许更新场景的应用。

原文地址:http://www.cnblogs.com/colder/archive/2013/01/24/2874456.html

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)


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

 

同事有这个疑问:在什么情况下会要求“读取后不许更新”

比如:该事物内读取数据后在更新操作,此时事物并未提交,如果另外有其他线程更改了这条数据,这时事务内的更新将有可能会覆盖更新的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值