mysql四种隔离级别以及原理

news2025/2/4 6:48:42

事务4大特性:

原子性: undolog日志来保证, 记录了要回滚的日志信息, 事务回滚时撤销已经执行的sql.
一致性:由其它3大特性来保证。
隔离性: MVCC来保证, 多版本并发控制。
持久性:由redolog来保证, mysql修改数据会在redolog中记录一份日志数据, 就算没有保存成功, 只要日志保存成功, 数据就不会丢失,
mysql崩溃恢复功臣-redo log.


事务并发问题

修改丢失:两个事务同时修改一个数据, 发生了修改覆盖问题。
脏读: 事务A读取到了事务B中未提交的数据, 当事务B回滚的时候, 事务A读到的都是脏数据。
不可重复读:事务A多次读取同一数据, 但是每次读取的值都不同, 这是因为事务B多次对数据进行更新和修改.
幻读:事务A在操作过程中, 表多次新增和删除, 并且新增和删除的数据会最终影响到事务A操作结果。


mysql隔离级别:

数据库事务隔离级别有4个, 由低到高依次为:
RU->Read Uncommitted(读未提交), 脏读, 不可重复读、幻读都存在
所有读不加锁, 读到的数据都是最新数据, 性能最好
所有写加锁, 写完释放

RC->Read Commited(读已提交) :解决了脏读, 存在不可重复读, 幻读问题。
使用mvcc技术, 每行加入隐藏字段(DB_TRX_ID:修改改行的最后一个事务ID,DB_ROLL_PTR:指向当前行的undo log, DB_row_id:当前行标识, DELETE_BIT:删除标志), 它实现了不加锁的读操作。
写操作:加行级锁, 事务开始后, 会在undo日志中写入修改记录, 数据行中隐藏列DATA_POLL_PTR存储指向该行的undo记录的日志。
读操作:不加锁, 读取时, 如果该行被其他事务锁定, 则顺着隐藏列DATA_POLL_PTR指针, 找到上一个有效的历史记录(有效记录:该记录对当前事务可见,且DELETE_BIT=0)

RR->Repeatable Read(可重复读):解决了脏读, 不可重复读, 存在幻读。
适用mvcc技术实现不加锁的读操作

S->Serializable(串行化): 全部解决, 但是并发效率不高。

以上读已提交和可重复读操作基本相同, 区别在于,行记录对当前事务的可见性, 读已提交级别对数据可见性是该数据最新记录,
可重复读基本对数据可见性是事务开始时, 该数据的记录。


什么是MVCC?
多版本并发控制。
在这里插入图片描述
在这里插入图片描述
只有在读已提交(不可重复读) 和可重复读情况下才会有mvcc


mysql默认隔离级别是可重复读。
在这里插入图片描述
可重复读每次 都用的第一次读的时候创建的readview, 之后每次都是复用这次的readview
读已提交事务每次查询的开始都会生成一个独立的readview。
可重复读的性能肯定是要比不可重复读性能更高。
通过版本链+readview来实现mvcc。

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

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

相关文章

flask路由、模板、请求与响应、闪现以及请求扩展

一、函数加装饰器的执行顺序 flask的路由基于装饰器---->在视图函数上再加装饰器---->加多个装饰器的执行顺序---->登录认证装饰器---->加载router下,先做路由匹配,匹配成功执行被auth包裹的视图函数 二、路由系统 flask的路由是基于装饰器的---->但是它的…

APB/AHB/AXI总线介绍和理解

APB/AHB/AXI总线介绍: APB/AHB/AXI均属于AMBA (Advanced Microcontroller Bus Architecture),常用于SoC设计中,全称叫作高级微控制器总线架构,它是由ARM公司研发推出的高性能片上总线协议。 AMBA 1.0还包含ASB和APB(A…

MP4格式视频怎么转mov格式?好用的视频格式转换方法分享

MOV格式是苹果公司的专有格式,因此在苹果设备上播放MOV格式的视频时,兼容性更好,因此可以实现更高质量的视频。如果我们需要高质量的视频输出,将MP4转换为MOV格式可能是个好选择。那么怎么进行转换呢?给大家分享几种简…

Linux环境下,Nginx+Naocs远程访问碰到的若干问题

一、配置背景 该项目来源于尚硅谷SpringCloud进阶课程,在linux环境下配置一个注册中心组。 二、碰到的问题 问题主要是远程访问Nginx显示无法连接的问题,接下来是排查方案: 1. 防火墙问题 这里需要确保双方电脑能ping通之后确保端口也能…

k210获取机器码

准备工作: kflash_gui(下载固件到开发板) key_gen_v1.2(需要将其下载至开发板) 1.kflash_gui 下载地址:Releases sipeed/kflash_gui GitHub 2. key_gen_v1.2下载地址:下载站 - Sipeed 3.…

Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增

01 线上服务器CPU飙升,如何定位到Java代码 解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路,以CentOS为例,总结为4步。 第1步,使用top命令找到占用CPU高的进程。 第2步,使用ps –mp命令找到进程下…

Three.js——十三、自定义大小画布、UI交互按钮以及3D场景交互、渲染画布为文件(图片)

画布全屏以及自定义大小画布 <!-- canvas元素默认是行内块元素 --> <divclass"model"style"background-color: #ff0000;"width"300"height"180" ></div>画布随窗口变化 // 画布跟随窗口变化 window.onresize fun…

cmake的一个测试demo

目录 一、ubuntu中安装cmake二、单个源文件main.cCMakeLists.txt的编写 三、多个源文件main.ctest1.ctest1.hCMakeLists.txt的编写 一、ubuntu中安装cmake sudo apt-get install cmake查看cmake的版本号 cmake --version二、单个源文件 main.c #include<stdio.h>int …

【微信小程序-uniapp】CustomButton 自定义常用吸底按钮组件

1. 效果图 2. 组件完整代码 <template><view:class="[custom-btn flex-center, size == big ? big : mid, type == primary ? primary : info, plain ? plain : , disabled ? disabled : , round ? round : ]"

苹果笔买原装的还是随便买?ipad触控笔推荐

当像iPad这样的平板电脑功能变得越来越强&#xff0c;能够承载的功能也会越来越多&#xff0c;并且会越来越多地渗透到我们的日常生活和工作中。随着电子设备的更新和软件的不断完善&#xff0c;电容笔的性能也在不断的提升&#xff0c;因此如何挑选一款相对好用的电容笔&#…

【Kafka】Ubuntu 部署kafka中间件,实现Django生产和消费

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、Kafka安装1.下载并安装Java2.下载和解压 Kafka3.配置 Kafka4.启动 Kafka5.创建主题和生产者/消费者6.发布和订阅消息 二、KafkaDjang…

AIS报文解析

!AIVDM,1,1,A,13u?etPv2;0n:dDPwUM1U1Cb069D,023* 我们知道消息内容就是13u?etPv2;0n:dDPwUM1U1Cb069D&#xff0c;这是一串ASCII码字符串&#xff0c;我们可以获取其对应的ASCII码数值。 但是在AIS的编码表不需要这么多符号&#xff0c;所以截取了其中一部分&#xff0c;如…

良心推荐!5款支持Linux系统的国产软件,兼容国产操作系统

虽然市面上大多数用户使用的是Windows操作系统&#xff0c;但也有不少使用Linux系统的用户&#xff0c;特别是国产操作系统的崛起&#xff0c;让Linux系统阵营的用户越来越多。Linux不像Windows那样&#xff0c;有着完整的生态环境丰富的软件应用&#xff0c;但也逐渐在完善中&…

探秘Session跨页面传递数据的神奇力量

探秘Session跨页面传递数据的神奇力量 前言一、什么是 Session 会话?二、如何创建 Session 和获取(id 号,是否为新)三、Session 域数据的存取四、Session 生命周期控制五、Session的销毁五、浏览器和 Session 之间关联的技术内幕 前言 本博主将用CSDN记录软件开发求学之路上亲…

自定义类型详解(结构体、枚举、联合)

目录 一、结构体 1.1结构体的认识&#xff1a; 1.2结构体的声明 1.先声明结构体类型&#xff0c;再定义该类型的变量 2.在声明类型的同时定义 1.3结构体的特殊声明 1.4结构体的自引用 1.5结构体的初始化和访问 1.6结构体内存对齐 1.7修改默认对齐数 1.8结构体传参 二…

驱动程序和应用程序

驱动程序和应用程序 一、应用程序和驱动程序如何关联起来的 1、文件描述符fp 与 struct file 应用程序&#xff08;APP&#xff09;在打开文件时&#xff0c;可以得到一个整数&#xff0c;这个整数被称为文件句柄。对于 APP 的每一个文件句柄&#xff0c;在内核里面都有一个…

AI辅助瞄准系统开发与实战(三)-竣工

文章目录 前言GUI功能整合提示框功能整合 总体代码自定义线程池YoloDectect工具类窗口绘制鼠标控制控制器GUI界面 总结 前言 okey&#xff0c;大概经过&#xff0c;两天的开发&#xff0c;我在这里完成了基本的全部开发。 那么我们先来看看大概的效果吧&#xff1a; 在这里的…

Vue3通透教程【十八】TS为组件的props标注类型

文章目录 &#x1f31f; 写在前面&#x1f31f; 回顾defineProps的基础写法&#x1f31f; defineProps的TS写法&#x1f31f; withDefaults方法&#x1f31f; 拓展&#x1f31f; 写在最后 &#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 …

解决 Error:java: Compilation failed: internal java compiler error

编译失败 因为maven工程项目的 多个model 模块的jdk版本不同 改成一样的就可以了

mysql进阶 —— 主从复制和读写分离

前言 在这篇文章中荔枝会梳理MySQL中有关主从复制和读写分离的相关知识点&#xff0c;主要包括基本的概念、配置搭建、命令和模式选择等几个方面。MySQL主从复制和读写分离属于MySQL数据库学习中的高阶内容了&#xff0c;大家要和荔枝一起加油学习噢~~~希望能帮助到需要的小伙伴…