sqlserver中的锁-01

概念:

共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。

更新 (U) 用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。

排它 (X) 用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。

 

 

增删改查使用:

SELECT 语句默认会产生共享锁,该锁查询完就释放,不需要等待所在的事务提交。

UPDATE 语句先使用更新锁锁定数据,然后升级成独占锁

INSERT,UPDATE 语句使用独占锁

 

 

关于update锁:

这里这种介绍一下,为什么需要更新锁?

首先updtae语句,对于符合条件的数据添加U锁(注意U锁和U锁不兼容),真正更新数据时,把U锁升级成X锁,

即update过程,是U锁升级X锁,修改数据

例如,update table1 set type='1' where type='b', 实际过程是首先对扫描的数据添加U锁,对于不符合条件的,释放U锁;对于符合条件的,把U锁升级成X锁,修改数据。

由于U所的互斥想,不可能对同一数据添加两个U锁。

 

若是没有U锁,则变成update过程,是S锁升级X锁,修改数据,

那么的话,在执行Update时,有可能两个事务同时用S锁,锁住了同一个数据;然后双方都是从S锁升级成X锁,都在等待对方释放S锁,这样就产生了死锁。

U锁的引入,可以有效的解决此类问题。

 

 

 

 

 

 

posted @ 2017-08-20 15:16  一苇过江  阅读(310)  评论(0编辑  收藏  举报