MySQL如何实现事务特性

目录

事务有那些特性

原子性如何实现 

持久性如何实现

隔离性与一致性如何实现


事务有那些特性

事务是由MySQL的引擎 InnoDB 来实现的

事务的特性 : 

原子性 不存在中间状态,要么完成,要么不完成

一致性 事务操作前和操作后,数据满足完整性的约束,数据库保持一致的状态

隔离性  事务与事务之间互不干扰,允许多个并发事务同时对其数据进行读写修改

持久性  事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失

原子性如何实现 

原子性是通过 undo log(回滚日志) 来保证的,那么什么是回滚日志

CREATE TABLE my_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL
);

如上,我创建一张表,表中含有 id 和 name 字段 在 数据存储中如下

每条记录都拥有着隐藏字段,包含事务id 和 undo 指针 (相当于版本链表) 如下

所以 当我们对数据操作成功时,保持在当前的undo指针 ,失败时,回到上一个 undo指针 

持久性如何实现

如图

Buffer bool 如何管理缓存 请看MySQL如何改进LRU算法_mysql 改进 lru-CSDN博客

也就是说 redo log 文件是专门记录某个数据页更改了什么,这样即使是系统故障,也能保证数据完整

 为什么已经有数据写入磁盘,还要redo log(重做日志)写入磁盘 这样多此一举呢?

写入 redo log(重做日志) 的方式使用了追加操作, 所以磁盘操作是顺序写

写入数据需要先找到写入位置,然后才写到磁盘,所以磁盘操作是随机写

磁盘的「顺序写 」比「随机写」 高效的多,因此 redo log 写入磁盘的开销更小。

 为什么是追加操作? 因为磁盘中有专属的Redo log 文件

隔离性与一致性如何实现

隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的;
一致性则是通过持久性+原子性+隔离性来保证;

MVCC 主要依赖 Read View(快照) 与 undo log(回滚日志实现)

undo log 示意如下:

 

 Read View 示意如下

 事务id划分

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

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

相关文章

SYD88xx使代码在RAM内存中执行/运行

SYD88xx使代码在RAM中执行 SYD8811/8810默认都是cache模式的,但是在代码首次运行的时候,需要将代码从flash搬到cache中执行,这样第一次的代码执行可能会比较慢,这里提供一个将需要提速的代码放到RAM中执行的方法。 对于SYD8811…

C# OCCT Winform 选中模型改变状态

选中状态设置 _context new AIS_InteractiveContext(_viewer);var selectionDrawer new Prs3d_Drawer();selectionDrawer.SetColor(Colors.Selection);selectionDrawer.SetDisplayMode(1);selectionDrawer.SetTransparency(0.1f);_context.SetSelectionStyle(selectionDrawe…

写一段关于力扣提交自动获取以往代码的油猴脚本

date: 2023-05-09 12:00:44 文章目录 背景思路实现逻辑 效果使用方法 背景 在脚本官网查到了不少,关于力扣网站的脚本 有自动全屏的有美化界面的 但是没有自动获取以往代码的。我习惯过(看一遍)题目,不喜欢自己点。 于是仿着…

网络层 IP协议【计算机网络】【协议格式 || 分片 || 网段划分 || 子网掩码】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一,前提 二&…

个人微信与企业微信:功能与应用差异详解

随着信息技术的飞速发展,微信作为一款全球知名的即时通讯软件,已深入到人们的生活和工作中。然而,当我们提及微信时,很多人可能并不清楚个人微信和企业微信之间的区别。本文将从服务的主体、好友权限、朋友圈功能、群聊功能、消息…

tar 解压缩命令详解

tar 解压缩命令详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊一聊Linux系统中非常常用的一个命令——tar,它主要用于打包和解压缩…

java.lang.ClassNotFoundException: javafx.util.Pair的问题解决与原因详解

先说解决办法: 1、引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version> </dependency>2、更换代码依赖地址&#xff1a; 原来依赖地址&#xff1a; import j…

企业信息资源集成-系统架构师(十二)

1、在操作系统中&#xff0c;&#xff08;&#xff09;是资源分配和管理的最小单位。 A进程 B线程 C作业 D程序段 答案&#xff1a;A 2、&#xff08;&#xff09;设计规定软件设计人员为软件组件定义正式、精确和可验证的接口规范&#xff0c;该规范应使用前提条件、后置条…

论文阅读:基于谱分析的全新早停策略

来自JMLR的一篇论文&#xff0c;https://www.jmlr.org/papers/volume24/21-1441/21-1441.pdf 这篇文章试图通过分析模型权重矩阵的频谱来解释模型&#xff0c;并在此基础上提出了一种用于早停的频谱标准。 1&#xff0c;分类难度对权重矩阵谱的影响 1.1 相关研究 在最近针对…

康谋分享 | 从CAN到CAN FD:ADTF在汽车网络中的应用

随着汽车电子技术的发展&#xff0c;车辆上配备了越来越多的电子装置&#xff0c;这些设备多采用点对点的方式通信&#xff0c;这也导致了车内存在庞大的线束。造成汽车制造和安装的困难并进一步降低汽车的配置空间&#xff0c;汽车总线逐步开始向网络化方向发展。 在此背景下…

QT绘图项目 - 汽车表盘

目录 前言: 整体代码 widget.h widget.cpp 效果演示 实现刻度文字正确排版 优化代码 达到效果 封装整理代码结构: widget.h widget.cpp 指针样式美化 优化后的指针API 效果演示 设置高速刻度为红色 优化刻度API 效果演示 速度显示优化 给内圈画上黑色 优化速度…

[modern c++][11] 类型描述库 typeindex

前言&#xff1a; #include <typeindex> typeindex库 包含两个类 std::type_info 和 std::type_index type_info type_info 可以用来接收 typeid 的返回值&#xff0c;常用成员函数如下&#xff1a; hash_code (C11) returns a value which is identical for the same…

python子类调用其他.py文件的父类

main.py需要使用os.py中的构造类。 os.py中定义了一个Ui_MainWindow类 在main.py中定义了一个MyMainWindow子类&#xff0c;传入两个父类的变量名 super(Ui_MainWindow, self).__init__()super() super() 是一个内置函数&#xff0c;用于返回一个代表父类的对象&#xff0c;…

2024/6/19 英语每日一段

From this story, one might imagine Warwick to be opposed to “killing in the name of conservation”; in fact, though, he’s conflicted. Conservation “is really complicated,” he writes. “There is an old saying that anyone who gives you a simple answer to…

涉及缓存数据的知识点

1. cookie 对比过去使用的cookie缓存数据 cookie 是浏览器缓存数据的一种机制&#xff0c;需要在http环境下&#xff0c;才能使用&#xff0c;才能缓存数据&#xff0c;共享数据。还得使用字符串api进行操作。 document.cookie"keyvalue; expiresnew Date(2024-00-00)&…

Linux CFS 调度器 (1):概述

文章目录 1. 前言2. CFS 调度器2.1 概述2.2 一些实现细节2.3 运行队列&#xff1a;红黑树2.4 一些特征2.5 调度策略2.6 调度器类别2.7 扩展&#xff1a;组调度 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff…

探索磁力搜索引擎:互联网资源获取的新视角

在当今数字化社会中&#xff0c;寻找和获取网络资源变得更加便捷和多样化。磁力搜索引擎作为这一趋势的一部分&#xff0c;提供了一种新颖而有效的方法来定位和获取用户所需的文件、媒体和其他数字内容。本文将深入探讨磁力搜索引擎的工作原理、使用场景及其在网络文化中的影响…

最快安装zabbix

部署zabbix 6.x 建议使用红帽系统。 https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.9-x86_64-minimal.iso1> 配置安装yum源 [rootzabbix ~]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8…

Spring框架常用注解(Annotation)收录

Spring框架常用注解(Annotation)收录 Spring框架广泛使用注解来配置和管理Bean&#xff0c;简化了XML配置&#xff0c;提高了开发效率。以下是一些Spring框架中常用的注解&#xff1a; 1. Component, Service, Repository, Controller 用途&#xff1a;这些是组件扫描注解&am…

`kubectl get pod -oyaml` 和 `kubectl describe pod`

kubectl get pod -oyaml 和 kubectl describe pod 这两个命令都用于获取 Pod 的信息&#xff0c;但它们提供信息的方式和内容有所不同&#xff1a; kubectl get pod -oyaml&#xff1a; 这个命令列出指定 Pod 的信息&#xff0c;输出格式为 YAML。输出内容是结构化的&#xff0…