概念:
共享 (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锁的引入,可以有效的解决此类问题。