mysql事务(MVCC机制:undo日志)(mysql执行过程:redo日志,Buffer Pool缓存池)

事务

目的:保证数据的最终一致性## 事务的目的

事务的4大特性(ACID)

1.原子性(Atomicity):由undo log日志来保证
2.一致性(Consistency):使用事务的最终目的,由业务代码正确逻辑保证,比如错误的try-catch
3.隔离性(Isolation):在事务并发执行时,他们内部的操作不能互相干扰
4.持久性(Dur©bility):一旦提交了事务,对数据库的改变就应该是永久性的。由redo log日志来保证
在这里插入图片描述

事务的隔离级别(4种)

事务隔离级别:从小到大,级别越高,数据直接影响越小
1.read uncommit 读未提交
2.read commit 读已提交:oracle 数据库默认
3.repeatable read 可重复度 :mysql 数据库默认
4.serializble 串行

每个隔离级别的缺点:
1.读未提交:读到了没有提交的数据,即脏读,性能很高,但不会使用
2.读已提交:不可重复读,在当前事务中,(由于其他事务已提交)每次读取到的数据都不一样,例如,在一个方法中,第一次读取时值是100,当其他事务提交后,将该值改为200,那么在该事务中再次读取时,就会变成200。
3.可重复读:幻读,脏写,在当前事务中,不管其他事务怎么提交数据,每次读到的值都一样。
4.串行:阻塞,效率低,当前事务未执行完,其余事务都得排队等待。

在这里插入图片描述

MVCC机制(多版本并发控制)(undo日志版本链)

引申:写时复制 机制(copy on write ):更新副本,然后进行替换。
这样机制优点是:读写分离,这样不管读操作和写操作,都可以支持并发。
虽然在替换过程中,可能会读到旧数据,但是在并发场景下可以接收

MVCC :undo.log日志版本链
在这里插入图片描述

流程实现
数据库在每次插入数据时,每条数据都有对应的事务id和回滚指针
1.数据每次操作后,会在undo.log 日志中插入一条回滚数据,并标记事务和回滚指针
2.在每次写的时候,都是先复制,再修改。

读已提交,指的就是每次都读最新提交的数据
可重复读,指的是每次都读和当前事务绑定的数据
在这里插入图片描述

暴露问题

可重复读:脏写问题
原因:可重复读会读到之前版本的数据,利用之前的数据进行操作后,来修改数据库,这样就会出现脏写的问题
解决:
1.利用乐观锁
数据库增加版本字段,每次查询和修改时带上版本号,然后可以在业务代码中来循环重试根据版本号进行修改,直到修改成功。
在这里插入图片描述

2.直接数据库进行操作,这样会加悲观锁
在这里插入图片描述

mysql执行过程(持久性的实现)

redo日志(Buffer Pool缓存池)

1.写入数据时,InnoDB 会先将数据先放到 Buffer Pool缓存池
2.然后将要回滚的数据写入到undo日志
3.同步的会写到 redo日志(先写到redori值缓存,然后再写的redo 日志磁盘文件)(写入redo 日志成功,就表示数据写成功)
4.同时会写到binlog日志
5.再将缓存数写入到**.ibd数据**文件

写入redo 日志和写入 ibd 文件的区别

顺序写:顺序写的效率远高于随机写
rdeo 日志是顺序写,每次都是在文件末尾追加
ibd文件是随机写,每张表都有对应的ibd文件,所以无法顺序写
在这里插入图片描述

查询方法需要事务吗?

查询方法中有多条查询语句,若隔离级别时可重复读,则需要开启事务
基于时间维度,对于统计报表等来讲,使用事务可以读到同一时间点的数据。这样数据的一致性会更高

对于高并发场景下的公司,一般使用读已提交。
对于传统公司,需要更多报表统计的公司,使用可重复度,保证同一时间点的数据一致性。

事务优化

长事务:
在这里插入图片描述
优化方案:
1.查询放到事务外
2.处理数据过多,则拆分多个事务处理
3.先insert后update,更新update操作放到事务后面,insert 放到前面(update 语句其他其他事务可能会用到)
4.应用侧保证一致:即放弃事务,回滚操作等放到代码中实现
在这里插入图片描述

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

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

相关文章

Unreal发布Android在刘海屏手机上不能全屏显示问题

Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题 Android设置全屏刘海屏全屏设置4.27设置刘海屏在部分手机不能显示问题 Android设置全屏 AndroidManifest.xml文件配置 ...<activity android:name"com.epicgames.ue4.GameActivity" android:label"st…

钉钉魔法盒:解锁企业数字化转型新密码

在数字化的浪潮中&#xff0c;一家公司在企业团队管理和商场综合运营中致力于实现数字化转型。于是&#xff0c;该公司在与无雀科技商讨后&#xff0c;决定引入钉钉平台&#xff0c;不仅要打造商业地产平台&#xff0c;更要优化团队管理流程&#xff0c;提升组织运营效率。 针对…

学习JAVA的二十二天(基础)

目录 网络编程 三要素&#xff1a; IP InetAddress类 端口号 协议 UDP协议 TCP协议 前言&#xff1a;学习JAVA的第二十一天&#xff08;基础&#xff09;-CSDN博客 网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序,进行的数据传输。 三要素&#xff1a;…

使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】

使用Python进行自然语言处理&#xff08;NLP&#xff09;&#xff1a;NLTK与Spacy的比较 自然语言处理&#xff08;NLP&#xff09;是人工智能领域的一个重要分支&#xff0c;它涉及到计算机如何理解、解释和生成人类语言。在Python中&#xff0c;有许多库可以用于NLP任务&…

ACM记忆化DFS与基于优先队列的BFS

基本概念--记忆化DFS 使用数组保存已经算出来的值&#xff0c;在后续的计算中减少大量的重复计算&#xff0c;提高效率。&#xff08;用于dp不方便&#xff0c;但是搜索方便的情况&#xff0c;可以提升效率。&#xff09; eg. 记忆化dfs求解斐波那契数列 int dfs(int n) {if…

【Node.js从基础到高级运用】十二、身份验证与授权:JWT

身份验证与授权是现代Web应用中不可或缺的部分。了解如何在Node.js应用中实施这些机制&#xff0c;将使你能够构建更安全、更可靠的应用程序。本文将引导你通过使用JWT实现用户注册、登录和权限控制的过程。 JWT&#xff08;Json Web Token&#xff09; JWT是一种用于双方之间…

前端vue3-手动设置滚动条位置

从B页面进行xx操作后需要跳转到A页面&#xff0c;并定位到AA职位&#xff0c;上图为A页面。 A页面的左侧是div&#xff0c;内层包裹List组件 给div定义refleftRef,在代码中写如下&#xff1a; function scrollTop() {if (leftRef.value) {console.log(99, leftRef.value);next…

【C#算法实现】可见的山峰对数量

文章目录 前言一、题目要求二、算法设计及代码实现2.1 算法思想2.2 代码实现 前言 本文是【程序员代码面试指南&#xff08;第二版&#xff09;学习笔记】C#版算法实现系列之一&#xff0c;用C#实现了《程序员代码面试指南》&#xff08;第二版&#xff09;栈和队列中的可见的…

多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)

设计模式是什么 类似于棋谱一样的东西 计算机圈子里的大佬为了能让小菜鸡的代码不要写的太差 针对一些典型的场景, 给出了一些典型的解决方案 这样小菜鸡们可以根据这些方案(ACM里面叫板子, 象棋五子棋里叫棋谱, 咱这里叫 设计模式), 略加修改, 这样代码再差也差不到哪里去 … …

python基于flask共享单车管理系统 234if

快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;然后线上管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方便的生活方式…

FFmepg--音频编码流程--pcm编码为aac

文章目录 基本概念流程apicode(核心部分) 基本概念 从本地⽂件读取PCM数据进⾏AAC格式编码&#xff0c;然后将编码后的AAC数据存储到本地⽂件。 PCM样本格式&#xff1a;未经压缩的⾳频采样数据裸流 参数&#xff1a; Sample Rate : 采样频率Sample Size : 量化位数Number o…

ASP.NET Core 8.0 WebApi 从零开始学习JWT登录认证

文章目录 前言相关链接Nuget选择知识补充JWT不是加密算法可逆加密和不可逆加密 普通Jwt&#xff08;不推荐&#xff09;项目环境Nuget 最小JWT测试在WebApi中简单使用简单使用运行结果 WebApi 授权&#xff0c;博客太老了&#xff0c;尝试失败 WebApi .net core 8.0 最新版Jwt …