【MySQL】事务篇

SueWakeup

                                                      个人主页:SueWakeup

                                                      系列专栏:学习技术栈

                                                      个性签名:保留赤子之心也许是种幸运吧

  

目录

本系列专栏

 1. 什么是事务

2. 事务的特征

原子性(Atomicity)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

3. MySQL实现事务的步骤

3.1 关闭事务自动提交

3.2 开启一个事务,标记事务的起始点

3.3 向数据库提交事务

3.4 将事务回滚,所有数据库操作被取消

3.5 开启mysql自动提交

4. 数据库事务的实现原理

5. 什么是 MVCC?

6. 数据库并发事务,会带来哪些问题?

脏读

不可重复读

丢失修改

幻读

7. 不可重复读和幻读的区别

8. 事务的隔离级别

读未提交

读已提交

可重复读

可串行化

注:手机端浏览本文章可能会出现 “目录”无法有效展示的情况,请谅解,点击侧栏目录进行跳转   


本系列专栏

1.数据库排名

2.【MySQL】数据库开篇

3.【MySQL】索引篇

4.【MySQL】事务篇

5.【MySQL】锁篇


 1. 什么是事务

  • 事务是数据库的一种特性,用于确保一个执行过程中所有步骤全部成功或者全部失败,是数据库操作的最小执行单元

2. 事务的特征

原子性(Atomicity)

事务是数据库的最小执行单元,事务的原子性确保数据库操作过程中的所有步骤全部成功或者全部失败

一致性(Consistency)

数据修改前和修改后的状态保持一致

隔离性(Isolation)

一个事务的执行不会被其他事务干扰,一个事务内部的操作和使用的数据,在并发中对其他事务是隔离的

持久性(Durability)

事务一旦被提交,将对数据库中的数据的改变是永久性的


3. MySQL实现事务的步骤

3.1 关闭事务自动提交

set autocommit=0;

3.2 开启一个事务,标记事务的起始点

start transaction;

3.3 向数据库提交事务

commit;

3.4 将事务回滚,所有数据库操作被取消

rollback;

3.5 开启mysql自动提交

set autocommit=1;

4. 数据库事务的实现原理

  • MySQL InnoDB引擎使用 redo log(重做日志)保证事务的的持久性,使用 undo log(回滚日志)来保证事务的原子性
    • redo log 是 InnoDB存储引擎层的日志,又称重做日志文件,用于记录事务操作的变化,记录的是数据修改之后的值。当MySQL意外宕机,InnoDB存储引擎会使用 redo log恢复,以此来确保数据的持久性
    • undo log保存了事务发生之前的数据的一个版本,用于回滚
  • MySQL InnoDB引擎通过锁机制、MVCC(多版本并发控制)等手段保证事务的隔离性
  • 保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障

5. 什么是 MVCC?

  1. MVCC是行级锁的一个变种,在很多情况下避免了加锁情况,开销更低。
  2. 大多数的MVCC都实现了非阻塞的读操作,写操作也只锁定必要的行;
  3. MVCC是一种用来解决 读-写冲突的并发控制,为事务分配单向增长的时间戳,为每个修改保存一个版本,每个事务都有一个对应版本的快照,快照版本按照单向增长的时间戳来决定先后顺序
  4. 读操作,只需要读该事务开始前的数据库快照,并不去读取正在修改的数据,仅读取事务开始前的最新版本

6. 数据库并发事务,会带来哪些问题?

脏读

一个事务正在访问数据并且对数据进行了修改,而修改操作还没提交到数据库中,这时另外一个事务也访问这个数据,然后使用这个数据。由于这个数据是没有提交的数据,那么另外一个事务读到的这个数据就是“脏数据”

不可重复读

一个事务内多次读同一个数据,在这个事务还没结束时,另外一个事务也访问该数据,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务读取到的数据可能不一致,这就发生了在一个事务内两次读到的数据是不一致的情况,所以称为不可重复读

丢失修改

一个事务读取一个数据时,另外一个事务也访问这个数据,在第一个事务修改这个数据后,第二个事务也修改了这个数据导致第一个事务的修改丢失

幻读

与不可重复读类似,在第一个事务读取了几行数据,另一个事务插入了一些数据,在随后的查询中,第一个事务发现多了一些原本不存在的记录


7. 不可重复读和幻读的区别

  • 不可重复读的重点是修改,多次读取一条记录,发现其中某些列的值被修改
  • 幻读的重点在于新增或删除,比如多次读取某条件下的记录,发现记录增多或减少

8. 事务的隔离级别

读未提交

最低的隔离级别,允许读取尚未提交的数据变更,可能导致 脏读、幻读或不可重复读

读已提交

允许读取并发事务已经提交的数据,可以阻止脏读

可重复读

对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读

可串行化

最高的隔离级别,完全服从 ACID 的隔离级别,所有的事务依次逐个执行,防止事务之间产生干扰,可阻止脏读、不可重复度以及幻读


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

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

相关文章

# Contrastive Learning(对比学习)--CLIP笔记(一)

Contrastive Learning(对比学习)–CLIP笔记(一) 参考:CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili CLIP简介 CLIP是一种多模态预训练模型,由OpenAI在2021年提出,论文标题:L…

Harmony鸿蒙南向外设驱动开发-Camera

功能简介 OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Device Interface)接口,对下实现相机Pipeline模型,管理相机各个硬件设备。 该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层。各层基…

搜索(未完结版)

前言 图的基础与遍历 图的存储方式 邻接表 List<int []>list[N]; list[x]存储x的所有出点的信息。 list[i][j]{first,second}其中first表示从i出发的某个出点的编号&#xff0c;second表示边权。 list[1]{{2,0},{3,0}} 1这个点有2和3连个出边 邻接矩阵 d…

Mouse IFN-α ELISA kit (Quick Test)

干扰素α&#xff08;IFN-α&#xff09;是一类由免疫细胞分泌的内源性调节因子&#xff0c;也被称为白细胞干扰素&#xff0c;主要参与响应病毒感染的先天性免疫。 基于结构特征、受体、细胞来源和生物活性的不同&#xff0c;干扰素可被分为Ⅰ、Ⅱ、Ⅲ三种类型&#xff0c;其中…

一起学习python——基础篇(17)

今天我说一下python中有关文件的操作。 1、检测一个目录里面有无这个文件夹、有无txt文件&#xff0c;代码如下&#xff1a; import os #文件的路径 testPath"D:/pythonFile" testPath2"D:/pythonFile/test.txt" #使用exists()方法检查是否存在文件…

springboot项目如何配置跨域?

在Spring Boot项目中配置跨域&#xff08;CORS&#xff0c;Cross-Origin Resource Sharing&#xff09;主要是为了允许来自不同源&#xff08;不同的协议、域名或端口&#xff09;的前端应用能够访问后端API。Spring Boot提供了多种方式来配置跨域支持。 1. 使用CrossOrigin注…

一篇详解CSS样式

华子目录 CSS常见样式CSS基本语法 文本样式color颜色名称十六进制颜色代码rgb&#xff0c;rgbahsl、hsla预定义颜色值transparent颜色继承 font-stylefont-weightline-heighttext-shadowbox-shadowtext-transformwhite-spacedirection 列表样式list-style-typelist-style-image…

C#:成绩等级转换

任务描述 本关任务&#xff1a;给出一百分制成绩&#xff0c;要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E&#xff0c;如果输入数据不在0~100范围内&#xff0c;请输出一行&#xff1a;“Score is error!”…

RREA论文阅读

Relational Reflection Entity Alignment 关系反射实体对齐 ABSTRACT 实体对齐旨在识别来自不同知识图谱(KG)的等效实体对&#xff0c;这对于集成多源知识图谱至关重要。最近&#xff0c;随着 GNN 在实体对齐中的引入&#xff0c;近期模型的架构变得越来越复杂。我们甚至在这…

为什么tcp需要四次挥手?

首先;我们需要先简单解释下tcp四次挥手都做了什么: tcp终止一个连接&#xff0c;需要经过四次挥手 第一次挥手&#xff1a;客户端发送一个 FIN 报文&#xff0c;报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态&#xff0c;表示停止发送数据&#xff0c;等待服务端的…

Power BI报告在PPT中实时刷新的实现技巧分享

前面我们刚介绍了如何在PPT中展示Power BI报告&#xff1f; 很巧的是&#xff0c;在刚刚的Power BI 2024年4月更新的诸多新特性中&#xff0c;PPT中使用的Power BI插件又有新特性的更新&#xff0c;数据自动刷新功能(新特性仅限国际版使用)&#xff0c;这个新特性支持最低15秒…

已解决javax.xml.bind.JAXBException: JAXB异常的正确解决方法,亲测有效!!!

已解决javax.xml.bind.JAXBException: JAXB异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 审核类定义 检查注解 验证上下文路径 测试序列化与反序列化 适应环境变化 总结 博主v&#xff1…

【3】c++多线程技术之线程同步与互斥

1、线程安全问题与数据竞争 线程安全问题与数据竞争是多线程编程中的重要概念。在C++中,线程安全问题主要涉及到多个线程对共享数据的访问,如果多个线程同时访问同一块内存区域,并且至少有一个线程对该区域进行写入操作,那么就可能发生数据竞争(Data Race)。数据竞争可能…

软件定义车队面临网络安全的曲折之路

当以色列 REE Automotive 设计其 P7 电动汽车底盘时&#xff0c;它是从软件开始工作的&#xff1a;扁平的车辆底盘完全可配置&#xff0c;每个轮胎附近有四个独立的模块&#xff0c;用于转向、制动、悬架和动力传动系统&#xff0c;每个模块均由电子驱动控制单元&#xff08;EC…

网络协议——OSPF(开放式最短路径优先)详解

1.什么是OSPF 开放式最短路径优先OSPF 是一种动态的高度可靠和高度可扩展的路由协议&#xff0c;用于构建大型网络中的动态路由系统 2. OSPF的协议号为&#xff1a;89 3. OSPF的特点: OSPF是链路状态协议使用了区域概念&#xff1a;减少路由选择协议对路由器CPU&#xff0c;…

2022年全国青少年信息素养大赛python初赛真题

这份文档包含了Python初赛的真题,涉及到Python编程的核心知识点,如变量、函数、条件语句、循环语句、导入库等。具体来说,文档中涉及到以下考点: - 变量:包括变量的定义、变量的初始化、变量的赋值、变量的递增、变量的递减等。 - 函数:包括函数的定义、函数的调用、函…

【LeetCode】二叉树类题目详解

二叉树 二叉树的理论基础 二叉树是结点的度数之和不超过2的树&#xff0c;二叉树总共有五种基本形态 二叉树的种类主要有&#xff1a; 满二叉树完全二叉树 二叉树的存储方式 顺序存储链式存储 二叉树的遍历方式 先序遍历&#xff08;深度优先搜索&#xff09;中序遍历&…

蓝桥杯-STL-string

目录 字符串定义 字符串初始化 字符串输入输出 字符串输出 字符串输入 字符串访问 字符串拷贝 字符串拼接 直接相加 append(const char*str,int n) 字符串比较 ​编辑字符串长度length()/size() 字符串查找find(string str) 查找子串substr(int a,int b) 字符串的…

秋招数据库学习2(20240408-20240412共10道)

由于感觉数据库难度可能暂时面试用不到&#xff0c;就先不刷啦 20240408 1.从不订购的客户 SELECT Name AS Customers FROM Customers C LEFT JOIN Orders O ON C.Id O.CustomerId WHERE CustomerId is nullselect customers.name as Customers from Customers wher…

.NET 设计模式—职责链模式(Chain of Responsibility Pattern)

简介 责任链模式是一种对象的行为模式。在责任链模式里&#xff0c;很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递&#xff0c; 直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求&#xff…