• 数据库的一级、二级、三级封锁协议


    0、内容补充

    X锁(排他锁、写锁)

    S锁(共享锁、读锁)

    一、一级封锁协议

            一级封锁协议是指,事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK).
            一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
            在一级封锁协议中,如果仅仅是读数据而不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。

    丢失修改:不加锁修改之后被其它事务修改了
    写:加X锁->修改数据R->成功或失败->释放X锁
    读:不加锁,导致读到别的事务未提交数据,且多次读结果不一致

    二、二级封锁协议

            二级封锁协议是指,在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
            二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据。
            在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读

    写:同一级封锁协议
    读:加S锁->读数据R->读完释放S锁,不会读到别的事务未提交的数据,但多次读会结果还是会不一致
    注:在数据R加了X锁之后,不能再加其它锁(其它事务的X锁和S锁);在数据R加了S锁之后,其它锁还能加S锁,但不能加X锁

    三、三级封锁协议

            三级封锁协议是指,在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
            三级封锁协议除了防止丢失修改和读“脏”数据外,还进一步防止了不可重复读。

    写:同一级封锁协议
    读:加S锁->读数据R->再读数据R->事务完成->释放S锁,多次读结果一致

    四、不同级别的封锁协议和一致性保证

  • 相关阅读:
    科目一过关技巧
    电脑数据丢失如何恢复呢?
    3.Android应用资源:处理配置变更
    AcWing_11. 背包问题求方案数_dp
    dl_model_param
    前端TypeScript学习day05-索引签名、映射与类型声明文件
    【Docker Compose】Docker ComposeV2新版本的日常使用
    OpenCL 介绍
    脑洞golang embed 的使用场景
    细胞膜包裹精氨酸脱亚胺酶脂质纳米粒/融合细胞膜包裹尿酸酶/过氧化氢酶脂质纳米粒的研究
  • 原文地址:https://blog.csdn.net/c_lanxiaofang/article/details/127974486