MySQL 的锁机制有哪些?

推荐答案

MySQL 的锁机制主要包括以下几种:

  1. 表级锁:锁定整个表,适用于 MyISAM 存储引擎。
  2. 行级锁:锁定表中的特定行,适用于 InnoDB 存储引擎。
  3. 页级锁:锁定表中的特定页,适用于 BDB 存储引擎。
  4. 意向锁:InnoDB 存储引擎使用意向锁来支持多粒度锁定。
  5. 共享锁(S锁):允许事务读取一行数据。
  6. 排他锁(X锁):允许事务更新或删除一行数据。
  7. 记录锁(Record Lock):锁定索引记录。
  8. 间隙锁(Gap Lock):锁定索引记录之间的间隙,防止其他事务插入数据。
  9. 临键锁(Next-Key Lock):记录锁和间隙锁的组合,锁定索引记录及其前后的间隙。

本题详细解读

表级锁

表级锁是最基本的锁类型,它锁定整个表。当一个事务对表进行写操作时,其他事务不能对该表进行任何操作,直到锁被释放。表级锁的优点是实现简单,开销小,但并发性能较差。

行级锁

行级锁是更细粒度的锁,它只锁定表中的特定行。行级锁允许多个事务同时访问表的不同行,从而提高并发性能。InnoDB 存储引擎支持行级锁。

页级锁

页级锁介于表级锁和行级锁之间,它锁定表中的特定页。页级锁的粒度比表级锁小,但比行级锁大。BDB 存储引擎支持页级锁。

意向锁

意向锁是 InnoDB 存储引擎引入的一种锁机制,用于支持多粒度锁定。意向锁分为意向共享锁(IS)和意向排他锁(IX),它们表示事务打算在表中的某些行上设置共享锁或排他锁。

共享锁(S锁)

共享锁允许事务读取一行数据,但不允许修改。多个事务可以同时持有共享锁,但当一个事务持有共享锁时,其他事务不能对该行加排他锁。

排他锁(X锁)

排他锁允许事务更新或删除一行数据。当一个事务持有排他锁时,其他事务不能对该行加任何类型的锁。

记录锁(Record Lock)

记录锁锁定索引记录,防止其他事务修改或删除该记录。记录锁是行级锁的一种。

间隙锁(Gap Lock)

间隙锁锁定索引记录之间的间隙,防止其他事务在间隙中插入数据。间隙锁主要用于防止幻读问题。

临键锁(Next-Key Lock)

临键锁是记录锁和间隙锁的组合,它锁定索引记录及其前后的间隙。临键锁是 InnoDB 存储引擎默认的行级锁类型,用于防止幻读和不可重复读问题。

纠错
反馈