Mysql的多版本并发控制记录
MVCC实现机制
mvcc的实现依赖于几个字段
-
表中的隐藏列:
- row_id:行id,没有主键和唯一列时默认生成的一个隐藏主键,有的话不生成 6字节
- trx_id:修改该行的事务id、
- roll_pointer:回滚指针,指向undo log 版本链
-
ReadView字段:creator_trx_id、m_ids、min_trx_id、max_trx_id
- creator_trx_id:生成该ReadView的事务id。
- m_ids:在生成该ReadView时,仍然活跃未提交的事务的id列表。
- min_trx_id:m_ids中的最小值。
- max_trx_id:创建ReadView时当前数据库给下一事务的id值。
访问机制:
- 如果记录的 trx_id<min_trx_id,说明这个版本的记录在创建ReadView前已经提交的事务生成的,所以该版本记录对当前事务可见。
- 如果记录的 tex_id>=max_trx_id,说明这个版本的记录时在创建ReadView之后的事务生成的,所以改版记录对当前事务不可见。
- 如果记录的 tex_id在 min_trx_id 和 max_trx_id 之间:
- 如果 tex_id 在 m_ids中:表示生成该版本记录的事务仍然活跃,所以该版记录对当前事务不可见。
- 如果 **tex_id 不在 m_ids中:**表示生成该版本记录的事务已经提交,所以该版记录对当前事务可见。
作者:墨鱼-yyyl
出处:https://www.cnblogs.com/moyu-yyyl/p/18009701
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~