后端岗位面试题更新 2026-08-05

请分别解释数据库事务并发中出现的脏读、不可重复读和幻读这三种现象,并说明它们各自产生的条件。

后端开发技术原理MySQL

考察说明

考查对事务隔离级别下三种并发异常现象的理解与区分。

回答思路

  1. 【回答框架 1】脏读是指一个事务读到了另一个事务未提交的数据。如果该未提交事务回滚,那么读取到的数据就是无效的,导致数据不一致。脏读的产生条件是事务A修改数据但未提交,事务B读取了该修改后的数据,随后事务A回滚,事务B读到的就是脏数据。
  2. 【回答框架 2】不可重复读是指在一个事务内,两次读取同一行数据,却得到了不同的结果。这是因为在两次读取之间,另一个事务修改并提交了该行数据。不可重复读强调的是同一行数据在两次读取中的不一致,与脏读的区别在于读取到的数据是已提交的。
  3. 【回答框架 3】幻读是指在一个事务内,两次执行同一查询,返回的结果集行数不同。这是因为在两次查询之间,另一个事务插入或删除了符合查询条件的行并提交。幻读强调结果集的变化,而不仅仅是单行数据的变化。
  4. 【回答框架 4】这三种现象与事务隔离级别密切相关。SQL标准定义了四种隔离级别:读未提交、读已提交、可重复读和可串行化。读未提交允许脏读,读已提交避免脏读但可能出现不可重复读,可重复读避免不可重复读但可能出现幻读(实际实现需依赖间隙锁等),可串行化则避免所有这三种现象,但并发性能较低。
  5. 【关键点 1】脏读读取的是未提交数据,可能回滚导致无效。
  6. 【关键点 2】不可重复读针对同一行数据,前后读取结果不一致。
  7. 【关键点 3】幻读针对查询结果集的行数变化,通常由插入或删除操作引起。
  8. 【关键点 4】隔离级别从低到高逐步避免这些异常,但牺牲并发性能。
  9. 【易错点 1】混淆不可重复读和幻读:不可重复读强调行数据变化,幻读强调行数变化。
  10. 【易错点 2】错误认为可重复读完全避免幻读,MySQL InnoDB通过MVCC和间隙锁在一定程度上避免,但标准定义下仍需可串行化。
  11. 【易错点 3】忽略脏读与未提交事务回滚的关系,仅强调读取到未提交数据还不够完整。