您的位置:首页 > 数据库 > 数据库管理

Sql Server 更新锁(UPDLOCK)

更多 2014/12/10 来源:据库管理学习浏览量:2234
学习标签: Sql Server
本文导读:Sql Server中查询使用(UPDLOCK)读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。有时候需要控制某条记录在我读取后就不许再进行更新,那么我就可以将所有要处理当前记录的查询都加上更新锁,以防止查询后被其它事务修改.将事务的影响降低到最小。

一、Sql Server 默认锁

1、INSERT、 UPDATE 或DELETE 命令时,SQL Server 会自动使用独占锁。

2、Select语句:

(1)、当事务的隔离级别为 READ  committed,READ  uncommitted 时为不加锁,既unlock 
(2)、当事务的隔离级别为 REPEATABLE READ,SERIALIZABLE时,为共享锁,既HoldLock

 

二、Sql Server 更新锁(UPDLOCK)优点

1、允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。

2、当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加上锁的记录在其它的线程中是不能更改的只能等本线程的事务结束后才能更改。

 

三、Sql Server 更新锁(UPDLOCK)实例

 

 
SQL 代码   复制

BEGIN TRANSACTION --开始一个事务
SELECT Qty
 FROM myTable WITH (UPDLOCK)
 WHERE Id in (1,2,3)

 UPDATE myTable SET Qty = Qty - A.Qty
 FROM myTable  AS A
 INNER JOIN  @_Table AS B ON A.ID = B.ID

COMMIT TRANSACTION --提交事务

说明

上例中在更新时其它的线程或事务在这些语句执行完成前是不能更改ID是1,2,3的记录的.其它的都可以修改和读,1,2,3的只能读,要是修改的话只能等这些语句完成后才能操作.从而保证的数据的修改正确.

 

收藏
261
很赞
412
您可能感兴趣