面试必备常见存储引擎与锁的分类

常见存储引擎与锁的分类

在 MySQL 中,不同的存储引擎具有不同的锁机制。以下是几种常见存储引擎及其锁的分类。

1. MyISAM 引擎

  • 锁类型:表锁
    • MyISAM 使用表级锁(Table Lock),即对整个表加锁。
    • 每次查询需要先对表加锁,再进行读写操作,锁的粒度较大。
    • 优点:锁管理简单,适用于读多写少的场景。
    • 缺点:并发性能差,当写操作频繁时,其他读写操作都会被阻塞。

2. InnoDB 引擎

  • 锁类型:行锁 & 表锁

    • InnoDB 支持行级锁(Row Lock),即对记录级别进行加锁,锁的粒度更小。
    • InnoDB 还支持表锁,但通常使用行锁来实现更高的并发性。
  • 锁实现:

    • 共享锁(S 锁): 允许多个事务对同一行读取。
    • 排他锁(X 锁): 一个事务获得排他锁后,其他事务无法对该行进行操作。
    • 间隙锁(Gap Lock): 锁住一个范围之间的间隙,防止其他事务在此范围内插入数据。
    • 下一键锁(Next-Key Lock): 结合行锁和间隙锁,锁住一行及其前后的间隙,用于防止幻读。
  • 应用场景: 适用于事务性应用,保证更高的并发性和数据一致性。

3. Memory 引擎

  • 锁类型:表锁
    • Memory 存储引擎使用表锁,即每次查询会锁住整个表。
    • Memory 表将数据存储在内存中,访问速度非常快,但一旦数据库重启,数据将丢失。
    • 应用场景: 常用于临时表或会话数据的缓存,不适合长时间保存数据的应用场景。

4. NDB Cluster 引擎

  • 锁类型:行锁
    • NDB Cluster 是一种分布式存储引擎,主要用于 MySQL Cluster 集群。
    • NDB Cluster 支持行级锁,锁的粒度较小,可以适应高并发应用。
    • 应用场景: 用于分布式系统和高可用场景,适合数据分片和水平扩展。

锁的分类总结

锁类型 描述 适用引擎
表锁(Table Lock) 锁住整个表,锁粒度大,适合读多写少的应用 MyISAM、Memory
行锁(Row Lock) 锁住特定行,锁粒度小,适合高并发 InnoDB、NDB Cluster
间隙锁(Gap Lock) 锁住行之间的间隙,防止插入,避免幻读 InnoDB
下一键锁(Next-Key Lock) 行锁与间隙锁结合,避免幻读问题 InnoDB