MySQL面试题, MySQL 的默认事务隔离级别是什么?为什么?
MySQL面试题, MySQL 的默认事务隔离级别是什么?为什么?
QA
Step 1
Q:: MySQL 的默认事务隔离级别是什么?为什么?
A:: MySQL 的默认事务隔离级别是 REPEATABLE READ(可重复读)。这是因为 REPEATABLE READ 能够在大多数情况下提供良好的并发控制,同时防止幻读(Phantom Read)和不可重复读(Non-
Repeatable Read)问题,从而保证数据的一致性。MySQL 通过间隙锁(Gap Lock)机制来实现这一点。
Step 2
Q:: 什么是事务隔离级别?MySQL 支持哪些事务隔离级别?
A:: 事务隔离级别是指数据库系统中管理并发事务的机制,用以控制事务之间的相互影响。MySQL 支持四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。每种隔离级别解决不同类型的并发问题(如脏读、不可重复读和幻读),隔离级别越高,事务之间的干扰越少,但相应的性能开销也越大。
Step 3
Q:: 如何在 MySQL 中设置事务隔离级别?
A:: 可以通过以下两种方式设置 MySQL 的事务隔离级别:1. 在 MySQL 配置文件 my.
cnf 中设置 global 级别的事务隔离级别,例如 transaction-isolation = REPEATABLE-READ
;2.
在会话级别设置隔离级别,例如 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
。
Step 4
Q:: 什么是脏读、不可重复读和幻读?
A:: 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据;不可重复读(Non-
Repeatable Read):一个事务在两次读取同一数据时,读到不同的值;幻读(Phantom Read):一个事务在两次查询之间,有其他事务插入了数据,导致两次查询结果集不同。
Step 5
Q:: MySQL 如何通过间隙锁(Gap Lock)机制防止幻读?
A:: 间隙锁是一种锁机制,用于锁定索引记录之间的间隙,从而防止其他事务在这些间隙中插入数据。通过这种方式,MySQL 可以确保在 REPEATABLE READ 隔离级别下防止幻读。具体来说,当一个事务进行范围查询时,间隙锁会锁定所有满足查询条件的记录以及这些记录之间的间隙。