• 封锁粒度
    • MySQL提供了两种封锁粒度:行级锁、表级锁
      • 应该尽量只锁定需要修改的那部分数据,而不是所有的资源。
      • 锁定的数据量越少,发生锁争用的可能性就越小,系统的并发程度就越高。
      • 但是加锁需要消耗资源,锁的各种操作(获取锁、释放锁、检查锁状态)都会增加系统开销。
      • 因此封锁粒度越小,系统开销就越大。
  • 封锁类型
    • 读写锁
      • 排他锁(Exclusive),又称写锁
        • 一个事务对数据对象A加了排他锁,就可以对A进行读取和更新。加锁期间其他事务不能对A加任何锁。
      • 共享所(Shared),又称读锁
        • 一个事务对数据对象A加了共享锁,就可以对A进行读取操作,但不能进行更新操作。加锁期间其他事务能对A加共享锁,但是不能加排他锁。
    • 意向锁(Intention Locks)
      • 一个事务在获得某个数据行对象的S锁之前,必须先获得表的IS锁或者更强的锁
      • 一个事务在获得某个数据行对象的X锁之前,必须先获得表的IX锁。
  • 两段锁协议:
    • ① 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。
    • ② 在释放一个封锁之后,事务不再申请和获得其它任何封锁。
    • 可串行化调度:通过并发控制,使得并发执行的事务结果与某个串行执行的事务结果相同。
    • 事务遵循两段锁协议是保证可串行化调度的充分条件,但不是必要条件。
  • 隐式和显式锁定
    • 隐式锁定:InnoDB存储引擎采用两段锁协议,会根据隔离级别在需要的时候自动加锁,并且所有的锁都是在同一时刻被释放。
    • 显式锁定:InnoDB也可以使用特定的语句进行显式锁定。
posted on 2020-02-13 18:34  xiaobaizzZ  阅读(732)  评论(0编辑  收藏  举报