浅谈MySQL事务

目录

一,事务的引入

上述的特性叫做“原子性”(事务最核心操作,事务还具备别的性质在下文);

二,日志体系

三,事务的使用

四,事务的基本特性

1.脏读:

2.不可重复读

3.幻读:

五,三个问题与隔离性的关系

1.read uncommitted 读未提交

2.read committed 读已提交

3.repeatable read 可重复读

4.serializable 串行化

五,如何看待隔离性与速度的取舍


一,事务的引入

在以前上学的时候打生活费非常麻烦,我记得那个时候我爸妈给我卡里打生活费我们要电话保持畅通,一边说着话一边看着卡里的生活费没有到账,为什么要这样啊难道还能丢了不成?没错确实怕丢啦。那个时候每次打生活费都要立刻查看没有到账,如果没有到账就要立即告诉爸妈让他们去银行核对,生怕迟一点这生活费就丢了。可能会形成我的余额没有增加,爸妈卡里余额少啦的情况。

这种情况在现在是不会再有了,引入事物就可以很好的解决“转账转一半”的这个中间状态情况。

不只是转钱,有可能日常编程中出现断电的情况使数据库内容出错。

所谓事务就是将多个要执行的SQL语句打包在一起,变为一个“整体”。要么全部执行成,要么全部执行失败。在不同的环境中,都有可以有事务。对应在数据库中,就是数据库事务。

但是这里的“要么一个都不执行”不是真的没有执行,而是执行到一半发现错误自动“还原操作”,

把之前执行过SQL语句进行“撤销”,最终的效果看起来像没有执行的一样这样的机制叫“回滚”(rollback)

上述的特性叫做“原子性”(事务最核心操作,事务还具备别的性质在下文);

二,日志体系

那么数据库是如何知道怎样“回滚”的? 数据库内部有一系列的“日志体系”,会被记录到文件中,既可以应对“程序崩溃”又可以应对断电。就算这两种情况发生了,但是回滚日志还是存在的,下次数据库启动的时候可以根据回滚日志进行回滚操作。

开启事务之后,每一步执行的SQL操作都会记录在案,后续如果需要回滚,就可以参考之前的记录内容进行回滚了。

注意像删除数据库,删除表这样的操作是不可以回滚的,因为这属于正常执行的操作不算是问题报错,算是正常执行了SQL语句。

开启事务后,一个事务之内虽然可以执行多个SQL语句但是不太多。

三,事务的使用

1.开启事务:start transaction;

2.实行多条SQL语句

3.回滚或提交:rollback / commit;

说明:rollback即全部失败     commit即全部成功(告诉服务器结束)


四,事务的基本特性

1.原子型(最重要的特性)

2.一致性: 描述的是,事务执行前与执行后,数据库中的数据都是“合法状态”,不会出现非法的临时结果的状态。

3.持久性:事务执行完毕之后,就会修改硬盘上的数据,事务都是持久的生效的。

4.隔离性(重点解释)

MySQL是一个“客户端-服务器”结构的程序,一个服务器可能会给多个客户端同时提供服务。

因此很可能服务器就要同时执行多个事务,此时就是“并发”执行。

并发执行的过程中可能会针对同一个表,进行增删查改,此时就可能会引入下面一些问题。

1.脏读          

2.不可重复读

3.幻读问题

下面来一一浅谈这些问题,以举例为主

1.脏读:

老师在备课的时候旁边来了小明,小明看到啦老师备课的内容就溜走了,之后老师又把备课的内容该啦,到啦上课的时候小明所回答与自己看到的并不一样。

有两个事务A和B并发执行,其中A在针对某个表的数据进行修改,B此时要去读这个数据,当B读完以后,A把表里的数据改变啦。----这就导致了B读取的数据不是最终的数据而是读到啦临时的数据。而读到的临时的数据就是“脏数据”。脏数据往往指的是数据已经过期了。

如何解决?就是给”写操作枷锁“一个事务进行修改的时候其他事务不能读。

至于如何进行这一操作那就要看以后的文章啦。


2.不可重复读

这次老师已经和小明约定好,只在备课结束后再看板书,于是结束后小明在看着看着发现,老师觉得板书有点点问题,于是就更改啦板书,重新提交。小明下一次看却发现板书突然就变样了。

有三个事务,事务A完成数据后,此时事务B开始读取数据,在读取数据的过程中,又来一个事务C,C对刚刚事务A的数据进行了修改。此时对于事务B来说,后续读取这个数据就和第一次读取的数据不一样。这就叫不可重复读。(体现的是事务B,多次读取的数据不一样)

如何解决?与脏读类似,一个事务在读取的过程中,其他事务不能修改它正在读的数据。

也就是”对写加操作“;


3.幻读:

幻读相当于是不可重复读的”特殊情况“

现在已经约定好了,在老师备课的时候,小明不允许来看,小明在看的时候,老师也不能去修改;

此时在小明看备课的时候,老师突然创建另一个备课方案二在原来的备课内容之后。小明发现虽然原来的备课内容没有变,但是突然冒出来一个方案二。这样的问题就是幻读问题。

有两个事务并发执行,事务A在读取的过程中,事务B删除或者新增啦一些数据。此时事务A再次读取这个数据时虽然后内容一样,但是”结果集“不同;

解决方法:只要有事务在进行读取时,我们就不对这个数据做任何操作。就算多个客户端同时向服务器提交了多个事务,但是服务器也要一条一条执行事务。这样的操作叫”串行化“


五,三个问题与隔离性的关系

在MySQL中提供了四个隔离级别,可以通过文件配置来设置当前服务器的隔离级别是哪个级别

不同的隔离级别,使事务之间并发执行的影响产生不同的差别,从而会影响到上述的三个问题的情况。

1.read uncommitted 读未提交

这样的情况下,一个事务可以读取另一个事务未提交的数据。

此时可能会产生脏读,不可重复读,幻读。但是多个事务并发程度是最高的,执行速度也是最快的。

2.read committed 读已提交

这种情况下,一个事务只能读取另一个事务的提交之后的数据了(给写操作加锁)

此时,可能会产生不可重复读,幻读问题(脏读问题解决了)

并发程度降低,执行速度变慢,事物之间的隔离性变高啦。

3.repeatable read 可重复读

这个情况下,相当于是给写与读都加操作啦,

此时可能会产生幻读的问题(脏读,不可重复读都解决了)

并发程度进一步降低,执行速度进一步降低,事务之间的隔离性进一步提高。

4.serializable 串行化

此时所有事物都是在服务器上一个接着一个执行的。

解决啦脏读,不可重复读,幻读的问题

并发程度最低,执行速度最慢,隔离性最高,数据最准确。


五,如何看待隔离性与速度的取舍

隔离性越高,数据准确性越高,执行速度也最慢。

隔离性越底,数据准确性越低,执行速度也最快。

速度与准确性不可兼得,各取所需,像刷视频都是追求速度舍弃准确性

视频中的点赞量到达一定数量后以后万为单位,不追求具体数量。

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

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

相关文章

系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)

文章目录 2.1 计算机系统概述2.2 计算机硬件2.2.1 计算机硬件组成2.2.2 处理器2.2.3 存储器2.2.4 总线2.2.5 接口2.2.6 外部设备 2.3 计算机软件2.3.1 计算机软件概述2.3.2 操作系统2.3.3 数据库2.3.4 文件系统2.3.5 网络协议2.3.6 中间件2.3.7 软件构件2.3.8 …

安卓开发板_开发评估套件_4G/5G联发科MTK安卓主板定制开发

安卓开发板采用了联发科八核A53 CPU,主频2.0GHz,采用12nm制程工艺,拥有强大的通用计算性能。配备GE8300 GPU,支持1080P视频编码和H.264硬解码,能够解析目前流行的视频和图片格式,非常适合各种功能APP的测试…

网络工程基础 不同网段下的设备实现通信

交换机可以实现同一个网段下的不同设备直接通信 路由器可以实现不同的网段下的设备进行通信 路由器查看路由表命令 display ip routing-table 华为路由器配置静态路由命令: ip route-static 目的网络地址 子网掩码 下一跳地址 电脑判断不同网段的ip会把请求转给网…

SOL 交易机器人基本知识

有没有可以盈利的机器人? 是的,各行各业都有许多盈利机器人。在金融领域,交易机器人被广泛用于自动化投资策略并根据预定义的算法执行交易。这些机器人可以分析市场趋势并做出快速决策,从而可能带来可观的回报。同样,在…

CentOS下安装SVN客户端及使用方法

一、前言 Subversion(SVN)是一款开源的版本控制系统,它可以帮助开发者追踪和管理代码、文档或其他文件的更改历史。在Linux系统中,特别是在CentOS环境下,安装和使用SVN客户端是日常工作中常见的任务。本文将介绍如何在…

【PHP项目实战训练】——laravel框架的实战项目中mysql数据库的数据的数据在blade.php中展示

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

【Python Cookbook】S01E02 从任意长度的可迭代对象中分解元素

目录 问题解决方案讨论 问题 从某个不确定长度的迭代对象中分解出 N N N 个元素。 解决方案 *分解操作和各种函数式语言中的列表处理功能有着一定的相似性。例如,如果有一个列表,可以像下面这样轻松将其分解为头部和尾部。 scores [99, 97, 91, 89…

Express 上传文件 Multer

在日常开发的方方面面,图片和资源上传已经是前后端开发中必不可少的环节了。在express中,如何接收和处理客户端上传的文件呢? 在 express 当中,如果要实现文件上传,是需要借助一个中间件 multer,它用于处理…

【Java】HOT100+代码随想录:动态规划(下)

目录 三、打家劫舍 LeetCode198:打家劫舍 LeetCode213:打家劫舍ii LeetCode337:打家劫舍iii(树形) 四、股票问题 时间不多了,其他的先不写了 LeetCode121:买卖股票的最佳时机 五、子序列…

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题,这边想要查询为什么出现无法访问的原因,但不知道如何在主机上面进行检查,由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板,因此联系Hostease的咨询了Hostease技术支持&a…

建立FTP服务器

文章目录 建立FTP服务器1. 使用VMware安装CentOS 7虚拟机。2. 安装完虚拟机后,进入虚拟机,修改网络配置(onboot改为yes)并重启网络服务,查看相应IP地址,并使用远程连接软件进行连接。3.配置yum源&#xff0…

深度解读CharGPT基本原理

CharGPT(这里似乎有一个小误会,可能是想指代的是“ChatGPT”,因为没有“CharGPT”的具体记录或产品)是OpenAI在2022年11月30日推出的一个革命性的语言模型应用。虽然直接称为“CharGPT”的查询可能是个笔误,但基于您的…

能芯(EnChip)模拟芯片应用和选型

数据显示,超过60%的驾驶者会在开车时听音乐,这不仅可以提高驾驶者的注意力,还可以缓解驾驶过程中产生的疲劳和压力,特别是在长途驾驶或交通拥堵时尤其明显。基于音乐欣赏,高保真音质是音响系统的核心指标之一&#xff…

高考前很焦虑?看看罗永浩提的三个建议!罗永浩推荐的随身WiFi居然蕴含这样的商机?2024普通人如何翻身?

你能相信现如今身家过亿的老罗罗永浩高中就辍学了吗?相信很多人都不敢置信吧。罗永浩无论是表现出来的口才、情商还是智商,无论如何都无法让人把他和高中辍学联系起来。 而这一点似乎也是老罗人生中的一个遗憾,于是又在一年高考季的时候&…

相对位姿估计

相对位姿估计 示意图 理论推导 离线数据库: P的位置 P [ X , Y , Z ] T P[X,Y,Z]^{T} P[X,Y,Z]T 相机内参 k 1 k_{1} k1​ 安卓手机: 相机内参 k 2 k_{2} k2​ 两个像素点位置 : p 1 和 p 2 p_1和p_2 p1​和p2​ 公式一:…

为师妹写的《Java并发编程之线程池十八问》被表扬啦!

写在开头 之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下! Java并发编程之线程池十八问 经过…

5月岚庭工人大会“安全就是效率、形象即是品质”

2024年5月18日、19日岚庭一月一期的“产业工人大会”和“工程大会”圆满举行初夏正当时,此次大会主要围绕“安全”与“形象”展开六场专题培训只为精益求精产业工人和装修管家全体到场。 岚庭 以绝对【安全】护家护园 安全就是生命,违章就是事故&#x…

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述

1. 文档管理系统是什么 文档管理系统(DMS:Document Management System)是一种软件系统,用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档,如文本文档、电子表格、图像、音频或视频文件等…

从一维到二维:数组转换的奥秘与应用

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:数组转换的魅力 二、一维数组转二维数组的基础方法 1. 确定二维数组的…

HTML拆分与共享方式——多HTML组合技术

作者:私语茶馆 1.应用场景 如果是一个产品级的Web项目,往往非常多的页面部分是重复的(为保持风格一致),每个HTML页面将这些重复部分重新写一次,既带来极大的工作量,也造成后续修改不便。 因此会考虑到将一个HTML的不同部分拆分为多个HTML页面,利用类似Include方式包含…