• 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锁的引入,可以有效的解决此类问题。

     

     

     

     

     

     

  • 相关阅读:
    bzoj_auto_submiter(辣鸡Py毁我青春系列)
    听说“辣鸡小隔膜”出V1.3了?
    shell脚本:统计分析 /home/ 目录用户磁盘使用情况
    shell脚本:DNS自检脚本
    Linux命令集锦:ssh命令
    Linux用户权限
    Linux文件属性
    Linux命令集锦:chown命令
    Linux命令集锦:chmod命令
    Linux命令集锦:tmux命令
  • 原文地址:https://www.cnblogs.com/shizheyangde/p/7400154.html
Copyright © 2020-2023  润新知