【MySQL】事务是什么?事务的特性又是什么?

news2024/11/26 8:20:40

文章目录

  • ✍事务是什么?
  • ✍事务的特性(四个)
  • ✍事务并发时出现的问题
  • ✍事务的隔离性

✍事务是什么?

事务是由一个或多个SQL语句构成的,在事务中,这些的SQL不可分割,是一个整体,整个事务类似于物理中的原子结构,不可再分。

简单概括,就是说,将多个语句给打包成一个整体了,在这个整体中的语句,要么一条都不执行,要么全部执行,不存在部分执行或者部分不执行的情况。

这样的定义,有效的避免了部分执行,部分未执行而产生的一些“中间状态·”引起的问题

举例来说:在转账系统中,支付者支付金钱和接收者接收金钱就是一个“事务”,他们两者只会同时执行或同时不执行,不会存在支付者支付金钱后,接收者没有接收到金钱这样的情况。

注意:全部不执行
这里的全部不执行,并非字面的一个语句都不执行,在进行操作时,SQL语句会一条一条的执行,当数据库遇到一些特殊情况时(例如:程序崩溃,主机断电,系统崩溃,网络断开…),数据库会将先前执行的SQL语句给一句一句恢复回去,这里的操作叫做“回滚”,使程序恢复如初,看起来就好像是一句都没有执行

回滚
为什么能实现回滚操作呢?是因为数据库在事务时,会记录日志(写入到硬盘)当事务执行完后,并没有差错,就会删除掉。

如果过程中出现了问题,就会根据日志来进行处理

  • 之前进行过新增操作,就会把数据删除
  • 之前进行过更改数据,就会恢复数据
  • 之前进行过删除操作,就会新增删除的数据
  • 之前进行过查询操作,没有影响,不会做出操作

✍事务的特性(四个)

  • 原子性 :指事务不可再分的最小单位。事务中的操作只有全部发生和全部不发生这两种情况。
  • 一致性:指事务执行之前和执行之后,数据是一致的。
    例如转账时,A转给B,500元,那么A的账户就会少500,B的账户就会多500.
  • 持久性:执行事务对数据的修改存放于硬盘上,会在硬盘上持久存在,下次程序重启,机器重启对数据的修改还是存在的。
  • 隔离性:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    会”加锁“,防止脏读情况的发生,从而提高了并发处理的准确性。
    “写加锁”,写的时候,不能读取数据。

✍事务并发时出现的问题

1.脏读
当事务A在对数据进行修改时,事务A等待一段时间,此时在等待过程中,事务B记录下了A对数据修改的结果,等待时间过后,事务A继续修改,此时事务B误将这次的结果作为最终结果记录下来。
这就是脏读。

2.不可重复读
存在三个事务ABC。
事务A对数据进行修改,接下来事务B进行读取数据(事务B的多个SQL都要进行读操作),在执B的过程中,又有一个事务C对数据进行了修改。

就会使B里面的不同读操作,读出来的结果不一样。
在这里插入图片描述

所以再进一步规定。进一步加锁–读加锁

3.幻读

事务A先修改并提交数据。事务B进行读取数据。此时事务C没有修改事务B读取的数据,但是给对应的表进行了新增数据/删除数据等操作…导致事务B读到的数据集不同(已有的数据是一致的,只是数据的条数增加/减少),可以视为是“不可重复读”的特殊情况。

解决幻读:
所以的事务,“串行化”使事务严格按照一个接一个进行执行,此时完全没有并发了,执行的效率最低,同时事务的隔离性最高。

总结:

  1. 脏读–写加锁
  2. 不可重复读–读加锁
  3. 幻读–串行化

在解决实际问题中,要想要保证数据的准确性,就需要牺牲一些效率。具体跟业务场景所定。

✍事务的隔离性

MySQL提供了四个隔离级别。

  1. read uncommitted允许读取其他事务未提交的数据 -->
    存在: 脏读+不可重复读+幻读 。
    并发程度最高,隔离性最低.
  2. read committed:只能读取其他事务提交后的数据 -->
    解决了脏读,存在不可重复读,幻读。
    并发程度降低,隔离性提高。
  3. repeatable read:针对读操作和写操作都加了锁 -->
    解决了脏读+不可重复读,存在幻读。
    并发程度又降低,隔离性又提高。
  4. 串行化(serializable):所有的事务都是串行执行的–>
    解决了脏读+不可重复读+幻读。
    并发基本没有,隔离性最高

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞

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

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

相关文章

阿里云短信服务免费100条

阿里云短信服务免费100条申请入口 aliyunbaike.com/go/sms 最新阿里云短信优惠,2元可以购买200条短信,如下图: 阿里云短信服务免费100条 另外,阿里云短信服务免费100条是指买2000条短信可以赠送100条,买5000条赠300条&…

算法学习——LeetCode力扣图论篇1

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣(LeetCode) 描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特…

RPC(Remote Procedure Call)远程过程调用

定义 RPC(Remote Procedure Call)即远程过程调用,是一种计算机通信协议,它允许程序在不同的计算机之间进行通信和交互,就像本地调用一样。 为什么需要 RPC? 回到 RPC 的概念,RPC 允许一个程序…

Pytorch最全详细安装指南

一. 安装Anaconda 敬请期待。。。 二. 安装Pytorch 1 打开Anaconda prompt,创建pytorch环境 输入 conda create -n pytorch python3.7 运行结束,若出现proceed 输入y 运行结束,创建pytorch环境成功 2 安装pytorch 输入nvidia-smi 查…

Weblogic10.3.6补丁升级

由oracle官方发布的漏洞公告,对weblogic进行补丁升级。本文介绍的是weblogic安装的版本为10.3.6.0,如果你使用的是其他版本的请根据实际版本来选择下载 对于weblogic补丁升级,具体步骤如下: 1、首先需要下载weblogic补丁程序 2…

(day 24)JavaScript学习笔记(异常的处理)

概述 这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。 今天学习异常的处理,主要是捕获异常、throw关键字主动抛异常…

【C++中的STL(未完成)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

SQLServer sys.default_constraints介绍

sys.default_constraints 是 SQL Server 的系统视图,它包含了数据库中所有默认约束的信息。默认约束是数据库对象(如表中的列)的约束,它为列定义了一个默认值,当在插入新行时没有为该列提供值时,将使用这个…

HarmonyOS实战开发-如何实现一个支持加减乘除混合运算的计算器。

介绍 本篇Codelab基于基础组件、容器组件,实现一个支持加减乘除混合运算的计算器。 说明: 由于数字都是双精度浮点数,在计算机中是二进制存储数据的,因此小数和非安全整数(超过整数的安全范围[-Math.pow(2, 53)&#…

【一】DDR3基础知识与IMG IP

【一】DDR3基础知识与IMG IP 一、DDR3的基本知识 1、DDR3全称为第三代双倍速率同步动态随机存储器 特点:掉电无法保存数据,需要周期性的刷新;时钟上升沿和下降沿都在传输数据;突发传输,突发长度burtst length一般为…

AcWing 1413. 矩形牛棚(每日一题)

原题链接:1413. 矩形牛棚 - AcWing题库 作为一个资本家,农夫约翰希望通过购买更多的奶牛来扩大他的牛奶业务。 因此,他需要找地方建立一个新的牛棚。 约翰购买了一大块土地,这个土地可以看作是一个 R 行(编号 1∼R&…

45.跳跃游戏||

// 定义一个名为Solution的类 class Solution {// 定义一个public方法jump,输入参数为一个整数数组nums,返回值类型为整数public int jump(int[] nums) {// 初始化跳跃次数结果变量为0int result 0;// 初始化当前覆盖的最远距离下标为0int end 0;// 初…

RVM安装ruby笔记

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…

某东推荐的十大3C热榜第一名!2024随身wifi靠谱品牌推荐!2024随身wifi怎么选?

一、鼠标金榜:戴尔 商务办公有线鼠标 售价:19.9¥ 50万人好评 二、平板电脑金榜:Apple iPod 10.2英寸 售价:2939¥ 200万人好评 三、随身WiFi金榜:格行随身WiFi 售价:69¥ 15万人好评 四、游戏本金榜&#xff…

python爬虫-----输入输出与流程控制语句(第四天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

车辆充电桩管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 1. 前台功能…

Linux系统使用Docker部署MinIO结合内网穿透实现公网访问本地存储服务

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器,可以在各种环境中运行,例如本地、Docker容器、Kubernetes集群等。它兼…

车载电子与软件架构

车载电子与软件架构 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠自己,四…

网安学习笔记-day10,web服务器

web服务器的部署 Web(World Wide Web)(“万维网”) 我们一般用的网页都由web服务器提供的 使用的协议是基于TCP协议的HTTTP(80)和HTTPS(443) 常用Web服务器发布软件 微软:IIS(Internet Information Services) Linux:Apache/LAMP/Tomcat 第三方&#…

36.HarmonyOS鸿蒙系统 App(ArkUI) 创建第一个应用程序hello world

36.HarmonyOS App(ArkUI) 创建第一个应用程序helloworld 线性布局 1.鸿蒙应用程序开发app_hap开发环境搭建 3.DevEco Studio安装鸿蒙手机app本地模拟器 打开DevEco Studio,点击文件-》新建 双击打开index.ets 复制如下代码: import FaultLogger from ohos.fau…