一、read view四个字段
create_trx_id:创建该read view的事务的事务id
m_ids:创建read view时,当前数据库中的活跃事务(指启动但还没提交的事务)
min_trx_id:m_ids的最小值
max_trx_id:创建read view后,下一个事务的id
二、聚簇索引的隐藏列
trx_id:最近一次改动该聚簇索引记录的事务id
roll_pointer:指向旧版本记录,形成版本链
三、read view在mvcc中工作原理
1.如果trx_id<min_trx_id,说明已经提交了,该版本对该事务可见
2.如果trx_id>max_trx_id,说明该版本在创建read view后才生成的,所以该版本对该事务不可见
3.如果min_trx_id<trx_id<max_trx_id:在m_ids中,说明未提交,不可见;不在m_ids中,说明已提交,可见
四、四种隔离级别实现
1.读未提交:直接读取最新数据即可
2.读提交:每次读取数据都生成新的read view
3.可重复读:在启动事务时生成一个read view,整个事务期间都在用这个read view
4.串行化:通过加读写锁来避免并行访问
五、幻读是怎么解决的
1、针对快照读(普通 select 语句):是通过 MVCC 方式解决了幻读
2、针对当前读(select ... for update或执行update、insert、delete这些语句执行前都会查询最新版本的数据时):当执行select... for update语句的时候,会加上next-key lock(间隙锁+记录锁的组合),如果有其他事务在next-keylock锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好了避免幻读问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具