5分钟精通数据库MVCC原理-事务的隔离性

作者: 猿人林克分类: 计算机技术 发布时间: 2023-01-31 10:59:34 浏览:34711 次

5分钟精通数据库MVCC原理-事务的隔离性

麦兜故事2017:
写了一段python伪代码,是这个逻辑吗? # 遍历undo log版本链表 for id in undo_log_ids: # 该版本由当前事务创建,可以访问 if id == creator_trx_id: return id # 该版本在ReadView生成之前已提交,可以访问 if id <= min_trx_id: return id # 该版本在ReadView生成之后提交,不可访问 if id >= max_trx_id: continue # 该版本不在未提交集合(已提交),可以访问 if not id in m_ids: return id

【回复】23 if 应该没有等号[微笑]
吐司先生r:
大佬,有一个疑问,这个min_trx_id是事务开启时活跃事务的最小的ID,但不一定就是这条记录版本链尾的事务吧,同理,这个最大事务是当前数据库创建的最大事务ID+1,也不一定就是该记录的版本链头的事务id+1吧

【回复】他这个地方说的有点问题~
夜之凌晨骑士:
up你好,请问有视频的pdf或者笔记吗[星星眼]

小小小小笑笑笑小帅:
有帖子说:在一个只读事务中的creator_trx_id(事务id)值都默认为0, 请教up主这个怎么理解

迪安51-数据王者:
我看那个课程,都讲了两三个小时。你把核心点都提炼出来,五分钟就讲的很棒了。

ceoning:
up你好,有个疑问,最后可重复读那个例子事务id=150是咋来的呢?第一次读的时候没有出现在活跃ids里也没有出现在版本链里;第二次读的时候就出现在版本链里了,这样第四步是不是就可判断直接访问了呢?

【回复】回复 @Recusive :新开的事务id会比201大吧,150看起来是之前的事务了,比readview中的最大事务id 200要小
【回复】150应该是新开的一个事物对该数据做了修改,且大于readview中最大的事物id,所以对当前事物不可见
一难受就开摆:
有个疑问想不通....undo log 版本链是怎么有多个版本的?多个事务在修改同一行数据时不是会上排他锁吗?

我要进大厂QAQ:
看到这里突然没了呜呜呜呜,大佬催更催更!!

【回复】帮忙多分享分享,流量惨淡完全没动力了 哈哈哈哈
【回复】回复 @猿人林克 :好的,up mysql系列快快更,谢谢啦~~
【回复】回复 @猿人林克 :up做的挺好的,谢谢[脱单doge]
吃花椒的布丁狗:
up我有一个问题[doge],mvcc的readview中第二部检测是否大于min,第三步检测是否小于max,那第四步真的还有必要吗,(一个大于90且小于201的数不自然是在90,201之间嘛

【回复】纠正一下,第二步是判断是否小于min,然后在这个区间也不代表你是活跃事务,应该以是否存在活跃事务列表中为准[doge]
【回复】第四步的重点是判断这个事务是否在readview的m_ids之中,进而判断这个版本对当前事务是否可见
风逝丿丶:
第三步>max_trx_id为什么没有=号呢?既然max_trx_id是当前下一个事务分配的id,说明现在还没分配这个事务,那第四步判断当然就不在m_ids里了吧。

pop_ret:
没背景音乐舒服了,希望别加背景音乐了

原理 MVCC 数据库锁 事务 数据库 SQL ACID MySQL 我在B站跨年 用知识过好新的一年

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!