Skip to content

面试速答(先看这里)

**一句话结论:**因此,InnoDB的所有操作都可以说是在事务的上下文中执行的,包括读取操作和修改操作。

60秒标准回答:

我们都知道,在InnoDB存储引擎中,所有的修改操作都必须在事务中进行的

那么,而 SELECT * 这种普通的读取操作其实也会在事务的上下文中执行 ,即使没有明确的开启事务语句,InnoDB存储引擎也会为查询自动开启一个隐式事务

因此,InnoDB的所有操作都可以说是在事务的上下文中执行的,包括读取操作和修改操作

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**我们都知道,在InnoDB存储引擎中,所有的修改操作都必须在事务中进行的,
  • **要点2:**那么,而 SELECT * 这种普通的读取操作其实也会在事务的上下文中执行 ,即使没有明确的开启事务语句,InnoDB存储引擎也会为查询自动开启一个隐式事务。
  • **要点3:**虽然查询语句也会在事务的上下文中执行,但是由于没有进行任何修改操作,因此事务不会持有任何锁,并且在查询结束后立即提交。

**记忆锚点:**InnoDB → 修改操作都必须在事务 → 取操作其实也会在事务 → 自动开启一个隐式事务 → 然查询语句也会在事务 → 常被称为自动提交事务

追问准备:

  • 围绕「InnoDB」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「修改操作都必须在事务」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「取操作其实也会在事务」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

我们都知道,在InnoDB存储引擎中,所有的修改操作都必须在事务中进行的,

那么,而**SELECT *** 这种普通的读取操作其实也会在事务的上下文中执行,即使没有明确的开启事务语句,InnoDB存储引擎也会为查询自动开启一个隐式事务。

因此,InnoDB的所有操作都可以说是在事务的上下文中执行的,包括读取操作和修改操作。

虽然查询语句也会在事务的上下文中执行,但是由于没有进行任何修改操作,因此事务不会持有任何锁,并且在查询结束后立即提交。这种隐式事务通常被称为自动提交事务(autocommit)。