程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

面试题:MySQL事务底层的实现原理是什么?

balukai 2025-05-09 17:03:01 文章精选 7 ℃

这也是面试中常见的问题,针对这个问题我们该怎么回答呢?我们需要将问题拆解:

1、先来介绍一下什么是事务

2、事务的四大特征(ACID)

3、事务的四大特征是怎么实现的


先来介绍一下什么是事务

事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位。其执行的结果将使数据库从一种一致性状态变迁到另一种一致性状态。事务是逻辑上是一个最小的原子单位,要么全部执行,要么全部不执行。


事务的四大特征(ACID)

1、原子性(Atomicity: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用

2、一致性(Consistency: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的。

3、隔离性(Isolation: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的影响。严格的隔离性对应了事务隔离级别中的串行化(Serializable),但是在实际应用中出于性能方面的考虑,很少会使用串行化。关于事务隔离级别的文章:《面试题:什么是脏读、不可重复读、幻读?如何解决?

4、持久性(Durability: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响


事务的四大特征是怎么实现的

1、原子性: 原子性的底层是通过 undo log 实现的。当多个SQL中有一个或多个执行失败时,需要用到 undo log 进行回滚

2、一致性: 实现方式是通过数据库自带约束(主键、字段类型等) + 用户自定义的约束

3、隔离性: 隔离性追求的是并发情形下事务之间的互不干扰。我们主要考虑简单的读操作和写操作:

1)(一个事务)写操作对(另一个事务)写操作的影响: 锁机制(LBCC)保证隔离性

2)(一个事务)写操作对(另一个事务)读操作的影响: MVCC保证隔离性

4、持久性: 持久性是通过 redo log + double buffer (双写缓冲) 来实现


注意:关于 undo log、redo log、double buffer 等内容我会在后文一一介绍,感兴趣的朋友可以关注我,我们一起来讨论。另外,我在工作之余整理了大量程序员面试题,如果想获取更多面试题,可以关注并私信我。

最近发表
标签列表