MySQL 事务篇

事务有哪些特性?

原子性:

一个事务中的所有操作,必须全部执行。要么全部完成要么就不完成。中间如果出现错误,就要回滚到初始状态。

持久性:

事务处理结束后,对数据的修改就是永久的,就是系统故障也不会改变

一致性:

指事务操作前后,数据保持完整约束性。

隔离性:

数据库具有多个并发事务同时对数据进行读写和修改的能力。隔离性可以防止多个并发事务在执行时由于交叉执行而导致的数据不一致。

为了实现以上四个特性。数据库实现了一下机制:

持久性通过redo log  (重做日志)来实现

原子性通过undo log (回滚日志)实现

隔离性通过MVCC多并发控制或者锁来实现

一致性通过 持久性+原子性+隔离性 实现

 首先讲隔离性:

并发事务会引发的问题:

脏读:一个事务读到了另个事务未提交的数据

不可重复度:在一个事务内多次读取同一个数据,发现两次读取的数据不一致

幻读:在一个事务中多次查询某个符合查询条件的记录数量,发现两次查询的记录数量不一致。

SQL提供四种隔离级别来规避以上四种现象,隔离级别越高,性能效率越低

读未提交:可以读取到另一个事务未提交的数据 (可能会发生脏读,不可重复读,幻读)

读提交:可以读取到另一个事务已提交的数据(可能会发生不可重复读,幻读)

可重复读:从一个事务开启,他读取到的数据从始至终就是一致的 (可能会发生幻读)

Innodb 引擎的默认隔离级别是可重复读。但是他很大程度上避免了幻读。采用了以下两种方式

1. 针对快照读(普通select语句)

它采用了MVCC多并发控制,因为事务在执行过程中看到的数据,一直和事务启动时看到的数据是一致的。所以即使其他事务中途插入一条数据,也不会被该事务看到。

2. 针对当前读(select ...for update)

间隙锁+记录锁来实现。当执行语句时,会加上记录锁和间隙锁。如果有其他事务在在间隙锁和记录锁内插入一条数据,就会被阻塞。无法插入数据,就很好的避免了幻读现象。

 下面讲讲ReadView在MVCC里如何工作的

先了解ReadView的两个重要知识

1. ReadView 的四个字段

2. 聚簇索引记录中两个跟事务有关的两个隐藏列

 1. m_ids 当前数据库中活跃事务id列表,活跃事务指的是启动了但是还未提交的数据

 2. min_trx_id 创建ReadView时,当前数据库活跃且未提交的事务中最小事务的事务id

 3. max_trx_id 创建ReadView当前数据库中应该给下一个事务的id值,当前数据库最大id值+1

  4. creator_trx_id 指创建该事务时的id值

聚簇索引记录中的两个隐藏列

 trx_id 

当一个事务对某条聚簇索引记录进行改动时,就会把该事物的 id 隐藏在trx_id 中

 roll_pointer

每次对聚簇索引记录进行改动时,就会把旧版本的记录写入到 undo 日志中,然后roll_pointer 是一个指针,指向每一个旧版本记录,可以通过它找到修改前的记录。

创建ReadView之后,可以将记录中的trx_id 分为三种情况:

 一个事务访问记录时,除了自己更新的记录总是可见之外,还有以下几种情况:

1. 如果记录的 trx_id 值小于min_trx_id ,说明这个版本的记录是在创建ReadView前已经提交的十五生成的。所以该版本记录对该事务可见。

 2. 如果记录的trx_id 值大于max_trx_id ,说明这个版本的记录是在创建ReadView后的事务提交生成的,所以该版本记录对该事务不可见。

 3. 如果该记录的trx_id在min_trx_id和max_trx_id之间,需要判断trx_id是否在m_ids 列表中

         1)在m_ids 列表中,表示生成该记录的事务仍然活跃着,所以该记录不可见

         2)不在m_ids 列表中,表示该事务已经提交,该记录可见。

这种通过版本链(通过undo日志来实现,使用roll_pointer 来实现指向旧版本的记录)的形式来控制多并发事务访问同一个记录的行为叫做MVCC(多版本并发控制)

可重复读和读提交都是通过ReadView来实现,可重复读是从始至终每个事务就有一个ReadView

而读提交在每次读取数据时都会创建一个新的ReadView。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity UI -- (5)增加基础按钮功能

分析分析一些常见UI 良好的UI设计会清晰地和用户沟通。用户知道他们能和屏幕上哪些东西交互,哪些不能。如果他们进行了交互,他们也要清楚地知道交互是否成功。换句话说,UI要提供给用户很多反馈。 我们可以来看看在Unity里或者在计算机上的任何…

【数据结构】树和二叉树和基本介绍、树的基本术语和表示、二叉树的性质和储存结构

文章目录 1.树的基本概念和介绍1.1树的概念1.2树的基本术语1.3树的使用1.4树的表示1.4.1图形表示1.4.2代码表示 2.二叉树的基本概念和介绍2.1二叉树的介绍2.2二叉树的性质2.3二叉树的储存结构2.3.1顺序储存结构2.3.2链式存储结构 1.树的基本概念和介绍 1.1树的概念 在以前的学…

关于Markdown文件的处理【笔记】

关于Markdown文件的处理【笔记】 前言推荐关于Markdown文件的处理一、md文件转word文档1 准备2 打开3 转为word文档4 导出结果5 打开 二、word文档转md文件1 准备2 导入3 打开4 显示图片5 打开 三、导入到CSDN中1 选择导入2 查看 四、导入设置1 前言2 导入设置3 修改配置 最后 …

C++中map的用法

博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页:陈童学哦 所属专栏:CSTL 前言:Hello各位小伙伴们好!欢迎来到本专栏CSTL的学习,本专栏旨在帮助大家了解…

【分享】ChatGPT的key,用key免费使用ChatGPT(每天更新)

1、ChatGPT用法总结: 自动化文本生成:可以用GPT生成文章、新闻、文本摘要,甚至小说、诗歌等文学作品。语音生成:结合语音合成技术,GPT可以生成自然流畅的语音,可以用于语音助手、交互式语音应用等。问答系统…

深度学习笔记之递归网络(五)递归神经网络的反向传播过程

机器学习笔记之递归网络——递归神经网络的反向传播过程 引言回顾:递归神经网络的前馈计算过程场景构建前馈计算描述 反向传播过程各参数的梯度计算各时刻损失函数梯度计算损失函数对各时刻神经元输出的梯度计算 Softmax \text{Softmax} Softmax回归的梯度计算关于 …

学习git

文章目录 02-为什么要学习Git软件?03 概念:版本控制04 概念:版本控制软件基础功能05 概念:集中式、分布式版本控制系统、多人协作开发5.1 文件冲突问题5.2集中式版本控制(CVS,SVN)5.3 分布式版本…

【KVM虚拟化】· virsh管理命令

目录 🍁libvirt架构概述 🍁使用virsh管理虚拟机 🍂常用命令总结 🍁kvm基本功能管理 🍂帮助命令 🍂KVM的配置文件存放目录 🍂查看虚拟机状态 🍂虚拟机关机与开机 🍂强制虚…

使用FFMPEG进行音频重采样

准备 1. ffmpeg 4.4 2. sdl2 3.一段原始的音频PCM数据 重采样流程 1.设置输入音频参数和输出音频参数 2.根据设置的参数初始化SwrContent上下文 3.创建一个输入buffer, 根据输入的音频参数(采样率,通道数,样本位深度)申请空间…

数据库sql语句-----游标和存储过程

关键词: create procedure xxx()as.......go 查询: exec ... 从例子中感悟一下: create table cartoon( linenum int, name varchar(50) not null, line varchar(100) not null )insert into cartoon values(1,灰太…

Linux文件与目录管理笔记1

鸟哥私房菜笔记 这里写目录标题 常用文件命令cd,pwd,mkdir,rmdir 执行文件的路径的变量:$PATHls,cp,rm,mv 文件内容查看指令(cat,tac,nl)可翻页查看(more,less)More(一页一页翻动)less 数据截取(head,tail)非纯文本文件:od 常用文件命令 cd…

信创办公–基于WPS的PPT最佳实践系列 (插入表格或图标)

信创办公–基于WPS的PPT最佳实践系列 (插入图表或图标) 目录 项目背景操作步骤1、插入表格2、实现放映功能 项目背景 当表格数据过大时,将其复制粘贴到PPT上时会显得插入的表格内容小、拥挤,使PPT看起来不美观。这个问题我们可以…

关于多线程

概念 进程:正在运行的程序,不仅指处于执行期的程序本身,还包括它所管理的资源,比如由它打开的窗口,地址的资源,进程状态等等 线程:CPU调度和分派的基本单位 进程好比工厂的车间,它…

[组合数学] 排列组合

文章目录 加法法则 --每一类都能够独立的完成任务乘法法则 --集合论 任务分步骤1000和9999之间有多个具有不同数位的奇数n 7 3 1 1 2 1 3 4 ^311^213^4 3112134 求除尽n的整数个数0到10000之间有多少个整数恰好是有一位数字是5两位数字可以组成多少两位互异且非零的两位数 减…

Flutter音乐播放audioplayers

简介 Flutter的audioplayers是一个Flutter插件,可以播放多个同时的音频文件,支持Android、iOS、Linux、macOS、Windows和web平台。它有以下特点: 可以从本地文件、网络资源或内存中加载音频可以控制音量、进度、速度和循环可以播放多个音频…

pg事务:隔离级别历史与SSI

事务隔离级别的历史 ANSI SQL-92定义的隔离级别和异常现象确实对数据库行业影响深远,甚至30年后的今天,绝大部分工程师对事务隔离级别的概念还停留在此,甚至很多真实的数据库隔离级别实现也停留在此。但后ANSI92时代对事物隔离有许多讨论甚至…

Everypixel: AI图片搜索引擎

【产品介绍】 Everypixel是一个基于人工智能的图片搜索引擎。可以搜索超过 50 个图片来源的优质的授权图库版权素材图片,还可以使用免费图案功能,找到适合自己需求的可定制无缝图案。 Everypixel利用深度学习和计算机视觉技术,为客户提供先进…

黑客入门指南,学习黑客必须掌握的技术

黑客一词,原指热心于计算机技术,水平高超的电脑专家,尤其是程序设计人员。是一个喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如电脑编程等等。 提起黑客,总是那么神秘莫测。…

VONR排查指导分享

不能注册或呼叫到SIP服务器端30秒挂断呼叫的黄金法则咬线或摘机状态单通或无语音收到400 bad request收到413,513 Request Entity Too Large或Message Too Large消息收到408, 480或者487 消息483 - Too Many Hops488 – Not Acceptable Here语音质量和思…

iptables 防火墙(一)

目录 一:iptables概述 二:netfilter/iptables关系 三:四表五链 1.规则表和规则链的作用 2. 四表 3.五链 ​4.规则链之间的匹配顺序 (1)主机型防火墙 (2)网络型防火墙 5.规则链内的匹配…