InnoDB支持行锁和表锁,MyISAM与Memory仅支持表锁。InnoDB通过行级锁和MVCC实现高并发读写,适合事务密集型应用;MyISAM在写操作时锁定整表,影响并发性能;Memory虽访问快但锁粒度粗,适用于低并发临时场景。选择引擎需权衡事务、并发与数据持久性需求,InnoDB为现代应用首选。

mysql中的存储引擎决定了表在处理并发访问时采用的锁机制,尤其是对表锁和行锁的支持。不同的存储引擎在锁粒度、并发性能和事务支持方面存在显著差异。以下是对常见存储引擎在表锁和行锁方面的支持情况分析。
MyISAM 存储引擎:仅支持表锁
MyISAM 是 MySQL 早期默认的存储引擎,不支持事务,也不支持行级锁。它在执行读写操作时使用表级锁(table-level locking)。
- 读操作(select)会加共享锁(read lock),允许多个会话同时读取同一张表。
 - 写操作(INSERT、UPDATE、delete)会加排他锁(write lock),阻塞其他所有读写操作。
 - 即使只修改一行数据,也会锁定整张表,影响并发性能。
 
因此,在高并发写入场景下,MyISAM 容易成为性能瓶颈。
InnoDB 存储引擎:支持行锁和表锁
InnoDB 是 MySQL 默认的事务型存储引擎,支持行级锁(row-level locking)和表级锁,根据操作类型自动选择合适的锁粒度。
- 普通 SELECT 使用共享锁(快照读,基于 MVCC 实现,通常不加锁)。
 - SELECT … for UPDATE 或 SELECT … LOCK IN SHARE MODE 会对选中行加排他锁或共享锁。
 - UPDATE 和 DELETE 操作会根据 WHERE 条件对匹配的行加排他锁。
 - 如果没有使用索引,InnoDB 可能升级为表锁或锁住大量行,降低并发性。
 - 支持间隙锁(gap lock)和临键锁(next-key lock),防止幻读。
 
InnoDB 的行锁机制大大提升了并发写入能力,适合高并发、事务密集型应用。
Memory 存储引擎:仅支持表锁
Memory 引擎将数据存储在内存中,访问速度快,但不支持行级锁。
- 所有读写操作都使用表级锁。
 - 适用于临时数据缓存或只读参考表等低并发场景。
 - 数据在重启后丢失,不适合持久化业务数据。
 
如何选择合适的存储引擎
根据锁机制的不同,选择存储引擎应结合业务需求:
- 需要高并发写入和事务支持 → 使用 InnoDB(推荐大多数场景)。
 - 以大量读为主、写操作少且不需要事务 → MyISAM 可考虑,但已不推荐。
 - 快速临时表、数据常驻内存 → Memory,注意其表锁限制。
 
基本上就这些。InnoDB 因其行锁和事务能力,已成为现代 MySQL 应用的首选引擎。