MySQL 篇-深入了解事务四大特性及原理

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍
   

文章目录

        1.0 事务的概述

        2.0 事务的特性

        2.1 原子性

        2.2 一致性

        2.3 持久性

        2.4 隔离性

        2.4.1 脏读问题

        2.4.2 不可重复读问题

        2.4.3 幻读问题

        3.0 事务的四个隔离级别

        3.1 read uncommitted

        3.2 read committed

        3.3 repeatable read

        3.4 串行化


        1.0 事务的概述

        在数据库管理系统中,事务是确保数据完整性和一致性的重要机制,通过事务的管理可以有效地处理并发操作、故障恢复等问题。

        用简单通俗的话来说,将多条 SQL 语句打包在一起并作为一个逻辑单元执行,可以构成一个事务,如果某一条语句出现错误,则进行回滚操作,最终可以使得数据回复到原来的样子;如果 “打包” 在一起的语句都没有出现错误,则进行提交操作,数据就会进行相应的变化并保持持久性。

语法结构:

-- 开始事务
start transaction;-- 事务回滚
rollback;-- 事务提交
commit;

举个例子:

START TRANSACTION;UPDATE table1 SET column1 = value1 WHERE condition1;
INSERT INTO table2 (column1, column2) VALUES (value1, value2);COMMIT;

        在以上例子中,UPDATE 和 INSERT INTO 语句被包含在同一个事务中。如果这些 SQL 都可以执行成功,事务被提交;如果其中的某一条失败,整个事务将被回滚。

        2.0 事务的特性

        事务具有四个特性,通常被称为 ACID 特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

        是数据库管理系统中保证数据操作正确性和可靠性的基础。通过事务的管理,可以避免数据丢失、数据不一致等问题,保证数据库操作的安全性和可靠性。

        2.1 原子性

        事务是一个不可分割的工作单位,将多条 SQL 语句打包在一起形成一个事务,要么一起执行成功,要么一条都不执行。如果全部语句执行成功,通过 commit 提交;如果事务中某一条语句执行失败,通过 rollback 回滚,整个事务将被回滚到初始状态。

        2.2 一致性

        执行事务前和执行事务完毕后,数据是一致性的,不会出现 “对不上” 的情况。如果事务发生回滚,执行事务前后的数据是一致的;如果事务顺利执行,执行事务前与执行事务后的数据一定能对的上。

        2.3 持久性

        一旦事务提交成功,其所做的操作将永久保存在数据库中(磁盘)。即使系统发生故障或重启,数据也不会丢失。数据一定存储在硬盘中。

        2.4 隔离性

        多个事务同时执行时,每个事务的操作与其他事务相互隔离,互不打扰。

        数据库中并发执行事务时,产生的一些情况:脏读问题、不可重复读问题、幻读问题。

        2.4.1 脏读问题

         脏读指一个事务读取了另一个事务未提交的数据,即读取到了未提交的数据,如果另一个事务回滚,读取的数据就是无效的。

脏读的具体情况:

        在并发执行事务中,假设事务 A 与事务 B 对同一份数据进行操作时,事务 A ,事务 B 同时进行对数据的操作,很有可能会遇到这样的问题:当事务 B 读到 data 数据之后,凑巧事务 A 在事务 B 读完该数据 data 后,将 data 改为 datas 。这种情况就是事务 B 读到了脏数据。 需要重点注意的是:事务 B 读取的是事务 A 未提交的数据。  

举个例子:​

​​​​​​

解决办法:

        在事务  A 进行写操作的时候,事务 B 不应该再去读取事务 A 正在操作的数据。因此,引入上锁之后,执行 A 的过程中,B 就不能执行了,要等待。简单来说:加上写锁后,在写操作过程中,是不允许其他事务来读取正在操作的数据。

        这就相当于降低了 '并发能力',也就降低数据库服务器的处理效率,提高了 '隔离性' ,也提高了数据的准确性。并发执行事务过程中,相互之间是如何影响的,彼此的影响越小,隔离性越高;反之影响越大,隔离性越低。

        2.4.2 不可重复读问题

        一个事务先后读取同一个数据 ,但两次读取的数据不同,称之为不可重复读。

        在执行并发事务时,假设事务 A 在第一次读取的数据 data ,凑巧事务 B 将 data 改为 data2 并且成功提交了。当事务 A 第二次读取的数据 data2 时,发现与之前的 data 不是同一个数据。需要注意的是:第二次读取的是事务 B 已经提交的数据。这就是不可重复读。

举个例子:

解决方法:

        在事务 A 进行读取操作的时候,不能让事务 B 进行写操作。加上读锁后,读数据的时候,不能修改数据。这就可以保证事务 A 前后两次读取的数据都是一致的。

        加上读锁后,也会降低数据库服务器的并发能力,提高了隔离性,让数据的准确性大大提升。

读藏与不可重读的区别:

        1)主要区别在于脏读是读取了未提交的数据,而不可重复读是读取了已提交的数据,但在读取过程中数据被其他事务修改了。

        2)脏读可能会导致读取到无效数据,而不可重复读可能会导致读取到不一致的数据。

        2.4.3 幻读问题

        也是数据库事务并发控制中的一个问题,指在一个事务内多次查询同一个范围的数据,但在查询过程中,其他事务插入了新的数据,导致多次查询结果不一致的情况。

        在执行并发操作时,事务 A ​在某个范围内执行查询操作,获取了一些数据行。在事务 A 执行期间,事务 B ​在同样的范围内插入了新的数据行。事务 A 再次执行相同的查询操作,发现范围内出现了新的数据行,导致查询结果不一致。

        事务 A 先后两次得到的结果集不同。

举个例子:

解决办法:

        “串行化”使所有的事务都严格的按照“一个接一个”的方式执行,完全没有并发了,此时执行效率是最低的,隔离性也是最高的,数据也是最准确的。

幻读与不可重复读的区别:

        1)不可重复读是指在事务中多次读取同一行数据时,其他事务修改了该行数据,导致读取结果不一致。

        2)幻读是指在事务中多次查询同一范围的数据时,其他事务插入了新的数据,导致查询结果不一致。

        3.0 事务的四个隔离级别

        MySQL 给程序员提供了四个隔离级别,可以在 MySQL 配置文件中进行设置:

        3.1 read uncommitted

                允许读取其他事务未提交的数据。

                存在脏读、不可重复读、幻读情况,此时的并发效率是最高的,隔离性最低。

        3.2 read committed

                只能允许读取其他事务提交后的数据。

                存在不可重复读、幻读情况,并发效率降低,隔离性提高。

        3.3 repeatable read

                针对读操作与写操作都加锁了。

                存在幻读情况,并发效率继续降低,隔离性提高。

        3.4 串行化

                所有事务都是串行执行的。

                此时不存在以上三种情况了,完全解决。但是并发基本没有了,隔离性最高。

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

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

相关文章

WAAP全站防护

近年来,随着移动互联网的快速发展,诞生了APP、H5、小程序等多种应用形式,更多的企业核心业务、交易平台都越来越依赖这些新型应用程序。与此同时,越来越多的第三方API接口被调用,API业务带来的Web敞口风险和风险管控链…

H5自适应点状球动态背景个人主页源码

源码名称:自适应点状球动态背景个人主页源码 源码介绍:一款H5自适应点状球背景个人主页源码,带有个人联系方式、个人介绍、足迹、会的技能、相册、旗下站点、留言发邮箱功能【仅前端代码需自行配置或修改为其他功能】。可自行修改为你的个人…

LabVIEW电磁阀特性测控系统

LabVIEW电磁阀特性测控系统 电磁阀作为自动化工程中的重要组成部分,其性能直接影响系统的稳定性和可靠性。设计一种基于LabVIEW的电磁阀特性测控系统,通过高精度数据采集和智能化控制技术,实现电磁阀流阻、响应时间及脉冲特性的准确测量和分…

用机床测头为什么能提升加工中心精度?提高生产效率?

制造业的蓬勃发展为企业提出了更高的精度和效率要求。在现代制造业中,机床测头作为一种关键的检测装置,能够实时监控加工过程中的误差,及时调整,保证加工质量的稳定性,提高加工中心的精度,进而提升生产效率…

打开链接跳转的模式

摘要: 今天遇到一个需求:后台小程序的域名下打开微信客服链接的!但是小程序的域名拒绝任何第三方域名,跨域了!为了上线这微信客服的功能,打开新页签,脱离小程序的域名实现微信客服链接的跳转启动…

MISC:杂项

一、文件类型识别 背景&#xff1a;遇到文件没有后缀&#xff0c;不知道文件类型。 方法一、使用Linux中的file命令 原理&#xff1a;file命令会识别文件的文件头&#xff0c;通过文件头识别出文件类型。 命令格式&#xff1a;file <filename> 而文件头则可通过010edito…

Android 录屏操作

Android 录屏操作 本文主要介绍android中如何通过MediaRecorder实现录屏操作的. 1: 申请权限 <uses-permission android:name"android.permission.RECORD_AUDIO" /> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"…

计讯物联水库泄洪监测预警系统,保障水库安全度汛

近日&#xff0c;受台风外围环流影响&#xff0c;多地受到特大暴雨侵袭。因此水库泄洪是势在必行。泄洪作为水库防洪的重要方法之一&#xff0c;水库可通过其库容拦蓄洪水&#xff0c;在水库容量超出或下游需求的时候则开始实行泄洪&#xff0c;达到减免洪水灾害的目的&#xf…

画图实战-Python实现某产品全年销量数据多种样式可视化

画图实战-Python实现某产品全年销量数据多种样式可视化 学习心得Matplotlib说明什么是Matplotlib&#xff1f;Matplotlib特性Matplotlib安装 产品订单量-折线图某产品全年订单量数据数据提取和分析绘制折线图 产品订单&销售额-条形图某产品全年订单&销售额数据绘制条形…

TypeScript(六)条件类型,函数,装饰器

条件类型 TypeScript 中的条件类型是一种高级类型&#xff0c;它使我们根据不同的条件创建更复杂的类型。 TS中的条件类型就是在类型中添加条件分支&#xff0c;以支持更加灵活的泛型 条件类型允许我们根据某个类型的属性是否满足某个条件&#xff0c;来确定最终的类型。 type…

【智能算法】蜻蜓算法(DA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2016年&#xff0c;Mirjalili受到蜻蜓静态和动态集群行为启发&#xff0c;提出了蜻蜓算法(Dragonfly algorithm, DA)。 2.算法原理 2.1算法思想 蜻蜓集群有两种行为目的&#xff1a;狩猎&#xf…

高端新颖知识竞赛活动方案

设计一场高端新颖知识竞赛活动&#xff0c;需要组织者用心策划&#xff0c;精心准备。下面这场竞赛设计新颖&#xff0c;可供大家组织竞赛活动时参考 。本竞赛分为“万箭齐发”、“城旗易主”、“群雄逐鹿”、“追风逐电”&#xff0c;四个环节&#xff0c;所有环节必须在主持人…

【CesiumJS-5】绘制动态路线实现飞行航线、汽车轨迹、路径漫游等

实现效果 前言 Cesium中&#xff0c;动态路线绘制的核心是借助CZML格式&#xff0c;CZML是一种用来描述动态场景的JSON数组,可以用来描述点、线、多边形、体、模型及其他图元,同时定义它们是怎样随时间变化的&#xff1b; CZML主要做三件事&#xff1a; 1.添加模型信息 2.添加…

如何在Linux系统部署APITable容器并实现无公网IP远程管理本地数据

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c;是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码

1 蛇梯问题 Snake and Ladder Problem 给定一个蛇梯板,找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数。基本上,玩家可以完全控制掷骰子的结果,并希望找出到达最后一个单元格所需的最小掷骰次数。 如果玩家到达的牢房是梯子的底部,玩家…

金融防线升级:构筑数据安全的不可逾越之墙

近日&#xff0c;中国人民银行专栏《金融科技支持高质量发展》指出&#xff0c;应不断增强金融行业的网络安全和数据安全保障能力&#xff0c;坚持总体国家安全观&#xff0c;持续完善金融网络安全、数据安全制度体系&#xff0c;依法开展金融业关键信息基础设施安全保护工作&a…

mac删除带锁标识的app

一 、我们这里要删除FortiClient.app 带锁 常规方式删除不掉带锁的 app【如下图】 二、删除命令&#xff0c;依次执行即可。 /bin/ls -dleO /Applications/FortiClient.app sudo /usr/bin/chflags -R noschg /Applications/FortiClient.app /bin/ls -dleO /Applications/Forti…

Wireshark4.2.3 x64 Setup20240313

参考&#xff1a;【抓包工具】win 10 / win 11&#xff1a;WireShark 下载、安装、使用&#xff08;https://blog.csdn.net/qq_39720249/article/details/128157223&#xff09; 文章目录 下载安装12 license 许可证3 donations&#xff1a;捐款4 Choose Components&#xff1…

算法-图的存储,图的转置,拓扑排序

1.图的存储 图用来对关系建模&#xff0e;图是节点和边构成的集合&#xff0e;节点反映图的元素集合&#xff0c;边反映图的元素集合中元素间的关系&#xff0e; 上述是由五个节点&#xff0c;三条边构成的结构&#xff0e;我们可以用图对其建模&#xff0e; 对由节点&#x…

【Python】Leetcode 240. 搜索二维矩阵 II - 削减矩阵+递归,击败88%

描述 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。 该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 思路 确定左右及上下限&#xff0c;削减矩阵&#xff0c;递归。 注意判断四个端…