全栈开发
数据库
【Q333】mysql 是如何实现 MVCC 的

mysql 是如何实现 MVCC 的

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 336 (opens in a new tab)

Author 回答者: Palai-s (opens in a new tab)

MySQL是通过在每行记录后面保存两个隐藏的列来实现MVCC的。这两个列分别是:

DB_TRX_ID:表示最后修改该行记录的事务ID。 DB_ROLL_PTR:表示指向该行记录上一个版本的指针。 当一个事务要读取一行记录时,它会根据自己的Read View(一个存储了当前活跃事务ID列表的数据结构)来判断该行记录是否对自己可见。如果不可见,它会通过DB_ROLL_PTR找到undo log中的历史版本,并判断是否可见,直到找到合适的版本或者没有更早的版本为止

这样,每个事务都可以看到数据在某个时间点的快照,从而保证了数据一致性和访问性能。