MySQL 面试题, MySQL 的默认事务隔离级别是什么?为什么?
MySQL 面试题, MySQL 的默认事务隔离级别是什么?为什么?
QA
Step 1
Q:: MySQL 的默认事务隔离级别是什么?为什么?
A:: MySQL 的默认事务隔离级别是可重复读(REPEATABLE READ)。这种隔离级别可以防止脏读和不可重复读的发生,并且通过间隙锁来防止幻读的发生。选择这种隔离级别是因为它在性能和数据一致性之间提供了一个良好的平衡。
Step 2
Q:: 可重复读(REPEATABLE READ)隔离级别是如何工作的?
A:: 在可重复读隔离级别下,事务在开始时会创建一个快照,使得事务中的所有查询都基于这个快照进行,即使其他事务进行了更新也不会影响当前事务。这种方式通过锁机制确保数据的一致性,并且使用间隙锁来防止幻读。
Step 3
Q:: MySQL 支持哪些事务隔离级别?
A:: MySQL 支持四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。每种隔离级别都有不同的锁机制和一致性保证。
Step 4
Q:: 什么是脏读、不可重复读和幻读?
A:: 脏读指一个事务读取了另一个事务未提交的数据;不可重复读指在同一个事务中多次读取同一数据时,数据可能发生变化;幻读指在同一个事务中多次执行查询时,返回的结果集中有新增或消失的记录。
Step 5
Q:: 如何设置 MySQL 的事务隔离级别?
A:: 可以使用 SET TRANSACTION 语句来设置 MySQL 的事务隔离级别,例如:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; 也可以在 my.
cnf 配置文件中设置全局的隔离级别。
Step 6
Q:: MySQL 的 InnoDB 存储引擎如何实现事务?
A:: InnoDB 存储引擎通过使用 MVCC(多版本并发控制)和锁机制(包括行锁和间隙锁)来实现事务的隔离性和一致性。每个事务都会有一个独立的快照,确保事务之间的隔离性。