推荐答案
MySQL 的锁机制主要包括以下几种:
- 表级锁:锁定整个表,适用于 MyISAM 存储引擎。
- 行级锁:锁定表中的特定行,适用于 InnoDB 存储引擎。
- 页级锁:锁定表中的特定页,适用于 BDB 存储引擎。
- 意向锁:InnoDB 存储引擎使用意向锁来支持多粒度锁定。
- 共享锁(S锁):允许事务读取一行数据。
- 排他锁(X锁):允许事务更新或删除一行数据。
- 记录锁(Record Lock):锁定索引记录。
- 间隙锁(Gap Lock):锁定索引记录之间的间隙,防止其他事务插入数据。
- 临键锁(Next-Key Lock):记录锁和间隙锁的组合,锁定索引记录及其前后的间隙。
本题详细解读
表级锁
表级锁是最基本的锁类型,它锁定整个表。当一个事务对表进行写操作时,其他事务不能对该表进行任何操作,直到锁被释放。表级锁的优点是实现简单,开销小,但并发性能较差。
行级锁
行级锁是更细粒度的锁,它只锁定表中的特定行。行级锁允许多个事务同时访问表的不同行,从而提高并发性能。InnoDB 存储引擎支持行级锁。
页级锁
页级锁介于表级锁和行级锁之间,它锁定表中的特定页。页级锁的粒度比表级锁小,但比行级锁大。BDB 存储引擎支持页级锁。
意向锁
意向锁是 InnoDB 存储引擎引入的一种锁机制,用于支持多粒度锁定。意向锁分为意向共享锁(IS)和意向排他锁(IX),它们表示事务打算在表中的某些行上设置共享锁或排他锁。
共享锁(S锁)
共享锁允许事务读取一行数据,但不允许修改。多个事务可以同时持有共享锁,但当一个事务持有共享锁时,其他事务不能对该行加排他锁。
排他锁(X锁)
排他锁允许事务更新或删除一行数据。当一个事务持有排他锁时,其他事务不能对该行加任何类型的锁。
记录锁(Record Lock)
记录锁锁定索引记录,防止其他事务修改或删除该记录。记录锁是行级锁的一种。
间隙锁(Gap Lock)
间隙锁锁定索引记录之间的间隙,防止其他事务在间隙中插入数据。间隙锁主要用于防止幻读问题。
临键锁(Next-Key Lock)
临键锁是记录锁和间隙锁的组合,它锁定索引记录及其前后的间隙。临键锁是 InnoDB 存储引擎默认的行级锁类型,用于防止幻读和不可重复读问题。