mysql的mvcc理解

人阅读

一、说到mvcc就少不了事务隔离级别(大白话解释)

 

序列化(SERIALIZABLE):事务之间完全隔离,当成一个序列,一个一个执行。

1

可重复读(REPEATABLE READ):不会被看成一个序列,但是这个事务里发生的改变,另一个事务中是看不到的,即同时执行两个select结果是一样的。(默认)

1

提交读(READ COMMITTED):这个事务里发生改变并且提交,在另一个事务里是可见的,两条select中间提交过数据,两次结果可能不同。

1

未提交读(READ UNCOMMITTED):可以读到未提交的数据,容易产生幻读脏读。

1

幻读和脏读:

幻读是每次查询的数据不一样。

脏读是查询到了错误的数据。(查询到结果后有个事务回滚了)

 

二、mvcc

三个隐藏字段

DB_TRX_ID:记录最近更新这条行记录的事务ID,大小为6个字节。

DB_ROLL_PTR:表示指向该行回滚段的指针,innodb便是通过这个指针找到之前的版本数据。该行记录上所有旧版本,在undo中都通过链表的形式组织。

DB_ROW_ID:行标识,如果表没有主键,就会生成一个隐藏的主键。

 

MyISAM不支持事务,所以这里就说InnoDB

 

undo log是为了回滚用的。

 

虽然mvcc保证了读是一致的,能解决幻读,但是那是历史数据,并不是真的数据,涉及到的列,我直接锁住,别的事务在这里阻塞。

 

问:那提交读就不锁了吗? 提交读中没有加间隙锁。但肯定使用了行锁,只有提交之后才能修改

 

事务和锁区别对待:

问:可提交读为啥不能解决幻读,可重复读为啥能解决幻读

 

后者间隙锁

 

仅仅行锁无法保证幻读,除非表锁。 这里说明可提交读如果表锁就能保证幻读。行锁的时候,就无法保证幻读。

 

未提交读 直接读取最新的数据

 

已提交读 每次查询的时候生成一个readview快照

 

可重读读 第一次读的时候生成一个快照,以后的就直接取这个快照

 

串行化:因为加锁,也不存在这个问题

 

几个数据:

当前活跃的事务id们 活跃最小 活跃最大+1(就是下次事务的id) 当前的事务id

 

判断版本:

 

1、如果版本和当前的是事务一样,就说明是当前的事务做的修改,可以直接使用

2、判断是不是小于最小活跃,如果小于,则说明生成readView的时候已经提交了,可以读

3、如果大于等于活跃最大+1,就说明是在这个事务之后开启的,不可见

4、如果是处于活跃列表中,则说明创建readView的时候,不在活跃列表中,就说明当时未提交,继续往前找

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“AI智能陪练培训服务系统,让学习更轻松、更高效

大家好,我是资深产品经理小李,今天咱们来侃侃一个新兴的教育辅助工具——AI智能陪练培训服务系统。这个系统可谓是教育培训行业的一股新势力,它究竟有什么神奇之处呢?下面我就跟大家伙儿好好聊聊。 一、什么是AI智能陪练培训服务系…

notebook主目录及pip镜像源修改

目录 一、notebook主目录修改二、pip镜像源修改 一、notebook主目录修改 在使用Jupyter Notebook进行数据分析时,生成的.ipynb文件默认会保存在Jupyter的主目录中。通常情况下,系统会将Jupyter的主目录设置为系统的文档目录,而文档目录通常位…

如何利用百炼智能体编排应用轻松搭建智能AI旅游助手?

各位小伙伴儿,好哈! 在上一篇文章《5分钟基于阿里云百炼平台搭建专属智能AI机器人》中我们体验了如何利用阿里云百炼平台的智能体应用搭建专属智能机器人。 它的配置过程相对简单,其“对话式”的输出形式也十分直观,非常适合初学…

计算机视觉目标检测-DETR网络

目录 摘要abstractDETR目标检测网络详解二分图匹配和损失函数 DETR总结总结 摘要 DETR(DEtection TRansformer)是由Facebook AI提出的一种基于Transformer架构的端到端目标检测方法。它通过将目标检测建模为集合预测问题,摒弃了锚框设计和非…

【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)

文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起,正向定位到当前行的首个字符 b2 从光标位置起,反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…

springboot 默认的 mysql 驱动版本

本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…

计算机网络(二)——物理层和数据链路层

一、物理层 1.作用 实现相信计算机节点之间比特流的透明传输&#xff0c;尽可能屏蔽具体传输介质和物理设备的差异。 2.数据传输单位 比特。 3.相关通信概念 ①信源和信宿&#xff1a;即信号的发送方和接收方。 ②数据&#xff1a;即信息的实体&#xff0c;比如图像、视频等&am…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”&#xff08;Change Data Capture&#xff09;。这是SQL Server数据库提供的一项功能&#xff0c;能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息&#xff0c;并使这些信息…

AI数字人+文旅:打造数字文旅新名片

在数字化浪潮的推动下&#xff0c;人工智能技术正以前所未有的速度渗透到我们生活的每一个角落。特别是在文化和旅游领域&#xff0c;AI数字人的出现&#xff0c;不仅为传统文旅产业注入了新的活力&#xff0c;也为游客带来了全新的体验。 肇庆AI数字人——星湖 “星湖”是肇…

做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)

图&#xff1a; 股票自选助手 这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据&#xff0c;支持添加、删除和更新股票信息。 功能特点 支持添加自选股票实时显示股票价格和涨跌幅一键更新所有股票数据支持删除不需要的股票使用中…

Protobuf编码规则详解

Protobuf编码规则详解 1 Message 结构1.1 tag1.1.1 字段编号(field_num)1.1.2 传输类型(wire_type) 1.2 字段顺序1.3 默认值 2 编码2.1 Varint编码2.1.1 Varint编码过程2.1.2解码过程2.1.3 存储2.1.4 小结2.2 有符号整数(sint32和sint64)编码的问题与zigzag优化 3 编码实践3.1测…

【docker】exec /entrypoint.sh: no such file or directory

dockerfile生成的image 报错内容&#xff1a; exec /entrypoint.sh: no such file or directory查看文件正常在此路径&#xff0c;但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。

计算机的错误计算(二百零七)

摘要 利用两个数学大模型计算 arccot(0.125664e2)的值&#xff0c;结果保留16位有效数字。 实验表明&#xff0c;它们的输出中分别仅含有3位和1位正确数字。 例1. 计算 arccot(0.125664e2)的值&#xff0c;结果保留16位有效数字。 下面是与一个数学解题器的对话。 以上为与…

MCANet: 基于多模态字幕感知的大语言模型训练无关视频异常检测

目录 摘要01 引言02 相关工作2.1 视频异常检测2.2 基于视频的大语言模型&#xff08;VLLMs&#xff09; 03 方法论3.1 问题定义3.2 MCANet3.3 图像字幕分支3.4 音频字幕分支3.5 基于LLM的异常评分3.6 视频-文本分数优化 04 实验4.1 数据集和评估指标4.2 实现细节4.3 定性结果4.…

WMS仓库管理系统,Vue前端开发,Java后端技术源码(源码学习)

一、项目背景和建设目标 随着企业业务的不断扩展&#xff0c;仓库管理成为影响生产效率、成本控制及客户满意度的重要环节。为了提升仓库作业的透明度、准确性和效率&#xff0c;本方案旨在构建一套全面、高效、易用的仓库管理系统&#xff08;WMS&#xff09;。该系统将涵盖库…

【Uniapp-Vue3】创建自定义页面模板

大多数情况下我们都使用的是默认模板&#xff0c;但是默认模板是Vue2格式的&#xff0c;如果我们想要定义一个Vue3模板的页面就需要自定义。 一、我们先复制下面的模板代码&#xff08;可根据自身需要进行修改&#xff09;&#xff1a; <template><view class"…

【Go】:图片上添加水印的全面指南——从基础到高级特性

前言 在数字内容日益重要的今天&#xff0c;保护版权和标识来源变得关键。为图片添加水印有助于声明所有权、提升品牌认知度&#xff0c;并防止未经授权的使用。本文将介绍如何用Go语言实现图片水印&#xff0c;包括静态图片和带旋转、倾斜效果的文字水印&#xff0c;帮助您有…

springCloudGateWay使用总结

1、什么是网关 功能: ①身份认证、权限验证 ②服务器路由、负载均衡 ③请求限流 2、gateway搭建 2.1、创建一个空项目 2.2、引入依赖 2.3、加配置 3、断言工厂 4、过滤工厂 5、全局过滤器 6、跨域问题

【UE5 C++课程系列笔记】22——多线程基础——FRunnable和FRunnableThread

目录 1、FRunnable 1.1 概念 1.2 主要成员函数 &#xff08;1&#xff09;Init 函数 &#xff08;2&#xff09;Run 函数 &#xff08;3&#xff09;Stop 函数 &#xff08;4&#xff09;Exit 函数 2、FRunnableThread 2.1 概念 2.2 主要操作 &#xff08;1&#xff…

《图解HTTP》 学习日记

1.了解WEB以及网络基础 1.1使用HTTP协议访问WEB web页面显示:根据web浏览器地址栏中输入指定的URL,web浏览器从web服务端获取文件资源(resource)等信息&#xff0c;从而显示出web页面 1.2网络基础TCP/IP 通常使用的网络(包括 互联网)是在tcp/ip协议族的基础上运作的&#xf…