京东是一面之《InnoDB存储引擎对MVCC的实现》

面试够了

什么是mvcc:总

多版本控制Multi Version Concurrency Control

为什么会诞生mvcc

当我们对MySQL进行并发操作时,数据可能就会出现不一致的现象。脏读、幻读、重复读、串行化等问题。

分:mvcc三大核心

隐藏列、Undo-log、ReadView

隐藏列:

  1. 聚簇索引列:仅提供给InnoDB构建树结构存储表数据。id自增
  2. 事务id:记录一条记录的事务控制的事务id。自增。
  3. 删除id:记录当前数据删除表示 1删除 0反之
  4. 回滚指针:将老数据存放在undo-log 中。并通过回滚指针找到对应的老数据

Undo-log

存储老数据.当数据需要混滚时,从而找到老数据。

ReadView

记录当前那条数据对活跃事务id数据快照

查询数据的事务到底能不能访问最新版的数据。如果能,就直接拿到表中的数据并返回,反之,不能则去Undo-log日志中获取旧版本的数据返回

其中的多版本主要依赖Undo-log日志来实现,而并发控制则通过表的隐藏字段+ReadView快照来实现

帮助文档

你可能感兴趣的:(面试,mysql,java,数据库)