MySQL面试题, 说说你了解的 MySQL 分别有哪些锁?
MySQL面试题, 说说你了解的 MySQL 分别有哪些锁?
QA
Step 1
Q:: 说说你了解的 MySQL 分别有哪些锁?
A:: MySQL 支持多种锁机制,主要包括以下几种:
1.
表锁(Table Lock):对整张表进行锁定,可以是读锁(共享锁)或写锁(排他锁)。表锁的开销较小,但会影响并发性能。
2.
行锁(Row Lock):对单行记录进行锁定。MySQL 的 InnoDB 存储引擎支持行锁,允许更高的并发。
3.
页锁(Page Lock):对数据页进行锁定,介于表锁和行锁之间。MySQL 一般较少使用。
4.
意向锁(Intention Lock):用来指示事务将对表中的某些行加锁,分为意向共享锁(IS)和意向排他锁(IX)。
5. **自动递增锁(AUTO-
INC Lock)**:专门用于处理 AUTO_INCREMENT 类型的字段,保证数据插入的顺序性。
Step 2
Q:: MySQL 中什么是死锁?如何解决?
A:: 死锁是指两个或多个事务互相等待对方释放锁而导致的无限等待现象。解决死锁的方法包括:
1.
使用事务超时机制:设置事务等待超时,超过一定时间后自动回滚。
2.
使用合理的锁顺序:确保所有事务按照相同的顺序请求锁,避免循环等待。
3.
拆分长事务:将长事务拆分为多个短事务,减少持锁时间。
4.
捕获和重试:在应用层捕获死锁异常并重新执行事务。
Step 3
Q:: MySQL 中的 MVCC 是什么?
A:: MVCC(Multiversion Concurrency Control,多版本并发控制)是一种并发控制机制,通过保存数据的多个版本,实现事务的隔离性。InnoDB 存储引擎使用 MVCC 来实现非阻塞的读操作,主要通过快照读(Snapshot Read)和一致性读(Consistent Read)来实现。在 MVCC 下,读操作不会阻塞写操作,写操作也不会阻塞读操作。
Step 4
Q:: 什么是 MySQL 中的 GAP 锁?
A:: GAP 锁(间隙锁)是一种行锁机制,用于锁定一个范围内的索引记录,但不包括索引本身。GAP 锁主要用于防止幻读,确保在事务隔离级别为可重复读(REPEATABLE READ)时,某个范围内的数据不会被其他事务插入或删除。
Step 5
Q:: MySQL 中的事务隔离级别有哪些?
A:: MySQL 支持四种事务隔离级别:
1.
读未提交(READ UNCOMMITTED):最低的隔离级别,事务可以读到未提交的数据,可能会出现脏读。
2.
读已提交(READ COMMITTED):保证事务只能读到已提交的数据,防止脏读,但可能出现不可重复读。
3.
可重复读(REPEATABLE READ):保证在同一个事务中多次读取同一数据的结果是一致的,防止脏读和不可重复读,但可能会出现幻读。
4.
可序列化(SERIALIZABLE):最高的隔离级别,通过强制事务串行执行,防止所有并发问题,包括幻读。