码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
MySql中mvcc学习记录
1、解决的问题
主要是为了解决并发读的问题(锁机制是解决并发写的问题)
2、实现原理
数据库中的每条数据会有两个隐藏的字段,1、修改或插入这条数据执行的事物id 2、上一个版本的roll_point指针,指向上一个版本的undo_log
3、ReadView机制
每次开启一个新的事物的时候会生成一个ReadView视图,readview中包含4个重要的字段
m_ids列表(当前开始事物时数据库中活跃的还未提交的事物id列表)
min_trx_id 当前活跃事物中最小的事物ID
max_trx_id 当前活跃事物中最大的事物ID
creator_trx_id 当前事物的ID
4、数据库并发读会产生的问题
读未提交-脏读
读已提交-不可重复读,幻读
5、mvcc如何解决上述问题
数据库每次开启一个事物的时候会生成一个ReadView视图,
按照sql的执行条件先找到满足条件的数据
然后看该条数据上2个隐藏的字段其中的一个事物id
判断该条数据中的事物id是否小于ReadView中的min_trx_id,如果小于说明在本次事物开启之前这条数据已经被修改被提交了,则可以查询到
判断该条数据中的事物ID是否等于ReadView中的creator_trx_id,如果等于说明这个数据是被本次事物中的某一条sql语句更新了,自己的事物更新的是可以读取到最新的值
判断该条数据中的事物id是否大于等于ReadView中的max_trx_id,如果是则说明这条数据已经被本次事物开启之后的后面的事物修改并提交了,则不能读取,这时候按照该条数据中指向上一个版本的指针找到上一个版本的数据然后再进行事物id的对比(可解决不可重复读的问题)
如果数据中的事物ID大于ReadView中的最小事物ID,小于ReadView中的最大事物ID时,则判断该数据的事物ID是否在ReadView的活跃事物m_ids列表中,如果在,则代表我Read View生成时刻,你这个事务还在活跃,还没有Commit,你修改的数据,我当前事务也是看不见的;如果不在,则说明,你这个事务在Read View生成之前就已经Commit了,你修改的结果,我当前事务是能看见的
相关阅读:
数据结构笔记(王道考研) 第七章:查找
论文摘要的写作技巧
[论文阅读] Multimodal Unsupervised Image-to-Image Translation
C语言入门(二)运算符和表达式
gtest语法(二)ASSERT_*和EXPECT_*断言
redhat环境ansible自动化部署
C++内存模型与名称空间总结,看这一篇就够了
在Win11上部署ChatGLM2-6B详细步骤--(上)准备工作
演示app基本定位方法(#案例:定位API#演示:ID定位法!#演示:class定位法!#演示:XPATH定位)
【漏洞复现】SolarWinds——任意文件读取
原文地址:https://blog.csdn.net/qq_38545713/article/details/126212255
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号