之前提到了MVCC可以一定程度上避免幻读,那具体MVCC是咋工作的呢?
需要介绍两个机制:read view和聚簇索引的两个隐藏列
read view
这个就是我们理解的快照,有四个字段,本事务id、活跃事务id列表(包含自己)、活跃事务里id最小的(还没提交的事务里最早开始的)、下一个事务id(不一定是活跃事务列表中最大值+1)
聚簇索引中的隐藏列
trx_id代表本行数据是由哪个事务更新的,undo_log是关键的版本控制指针。就是用read view里的m_ids看这条记录对当前事务可见与否,可见就读不可见就顺着链表向下找。
工作方式
可重复读是启动事务时生成一个 Read View,然后整个事务期间都在用这个 Read View。
读提交是在每次读取数据时,都会生成一个新的 Read View。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。