0%

封锁

封锁.png

封锁粒度

粒度的辩证关系

  • 粒度小,系统开销大,并发程度高
  • 粒度大,系统开销小,并发程度低

MySQL提供两种粒度

  • 行级锁
  • 表级锁

封锁类型

读写锁

  • 互斥锁(Exclusive)

    • X锁、写锁
    • 加了X锁后,不能再加任何锁
  • 共享锁(Shared)

    • S锁、读锁
    • 加了S锁后,还可以再加S锁

意向锁

  • 作用

    • 快速判断表中是否有某一行上了锁
  • 过程

    • 表的IS锁–>行的S锁
    • 表的IX锁–>行的X锁
  • 兼容关系意向锁兼容关系.png

封锁协议

三级封锁协议

  • 一级封锁协议

    • 概念

      • 事务修改数据时必须加X锁,事务结束后释放

      一级封锁协议.png

    • 作用

      • 解决丢失修改问题
  • 二级封锁协议

    • 概念

      • 事务读取数据时必须加S锁,读完之后释放

      二级封锁协议.png

    • 作用

      • 解决脏读问题
  • 三级封锁协议

    • 概念

      • 事务读取数据时必须加S锁,事务结束后释放

      三级封锁协议.png

    • 作用

      • 解决不可重复读问题

两段锁协议

  • 要求

    加锁和解锁分为两个阶段进行

    • 读写操作之前要获取数据对应的封锁
    • 释放封锁之后,不再请求任何封锁
  • 可串行化调度

    • 通过并发控制,使得并发执行的事务结果与某个串行执行的事务结果相同
  • 两段锁协议是可串行化调度的充分不必要条件

MySQL-InnoDB引擎

隐式锁定

  • 根据隔离级别在需要的时候自动加锁
  • 所有的锁在同一时刻被释放

显示锁定

  • 使用特定的语句