InnoDB 存储引擎的锁的算法

40 阅读1分钟
  1. Record Lock(记录锁):

    • 用于锁定单个行记录,确保在事务对该行记录进行修改时,其他事务不能同时对该记录进行修改。
    • Record lock 是最精确的一种锁,也是最强的一种锁,因为它直接锁定了某个具体的行。
  2. Gap Lock(间隙锁):

    • 用于锁定一个范围,但不包括记录本身。当事务需要向一个范围内插入新的记录时,会在这个范围设置一个间隙锁,防止其他事务插入相同范围内的记录。
    • Gap lock 的目的是为了防止幻读(Phantom Read)的问题,即一个事务在读取某个范围内的记录时,另一个事务插入了新的记录,导致前一个事务再次读取时发现多了一些记录。
  3. Next-Key Lock(record+gap 临键锁):

    • 用于锁定一个范围,包含记录本身。它实际上是 Record Lock 和 Gap Lock 的结合,锁定了一个范围同时包含了记录本身。
    • Next-Key Lock 主要解决了 Record Lock 和 Gap Lock 分别存在时可能导致的问题,如幻读。

这些锁的使用是为了在不同事务并发访问时,保证数据的一致性和隔离性。在具体应用中,InnoDB 存储引擎会根据事务的隔离级别选择合适的锁算法,如 READ COMMITTED、REPEATABLE READ 等。