MySQL(五):事务简介、事务的特性、事务的概念及状态、支持事务的引擎

news2024/9/22 19:33:24

目录

  • 一、事务的起源
  • 二、事务的特性
    • 2.1 原子性(Atomicity)
    • 2.2 隔离性(Isolation)
    • 2.3 一致性(Consistency)
    • 2.4 持久性(Durability)
  • 三、事务的概念及状态
  • 四、支持事务的引擎

一、事务的起源

事务源于日常生活中的业务,现有这样的一个场景,A账户有11元,B账户有2元,B要向A借10元钱,此业务对应到数据库中对应两条语句,一条是将A账户的余额减10,另一条是将B账户的余额加10,但如果在刚执行完第一条语句后,服务器断电了,这该怎么办?A 的钱扣掉了,但B并没收到A转的钱。
事务可以解决上述问题,主要思想就是将上述两条语句的执行进行打包,要么这两条语句都一起执行完,要么就一条都不执行

二、事务的特性

2.1 原子性(Atomicity)

在数据库中是这样定义原子性的:要么全做,要么全部做。
现实世界中的一个不可分割的操作(例如转账)可能对应到数据库中若干条不同的操作,但在任何一个时间点数据库都可能发生错误,在MySQL中采用日志的方式保证事务的原子性

2.2 隔离性(Isolation)

在现实世界中,两次状态转换应该是互不影响的,比如A向B同时进行了两次5元转账,操作完成后A的账户金额应减少10元,B的账号金额应该增加10元,将A像B同时进行的两次操作称为T1和T2,如果T1和T2两个事务依次执行:
在这里插入图片描述
但在数据库中,可能是T1和T2交替执行:
在这里插入图片描述
如果上述操作执行完A账户金额为6,B账户金额为12,平白无故的多出10元,银行是肯定不会允许这样的事情发生的。
现实生活中的两次状态转换之间不能相互影响,这个规则就是隔离性

2.3 一致性(Consistency)

在现实世界中存在很多的约束,例如身份证号是不能重复的,性别非男即女,信号灯只有红绿黄三种颜色等,只有符合约束的数据才是有效的或说是符合一致性的。

在转账业务中的一致性要求就是:参与转化的账户的总余额不能发生改变。原子性和隔离性会对一致性产生一定的影响,如果不遵行原子性,转了一半后不转了,那这不符合一致性的要求,如果不遵行隔离性,转账完之后的总余额变多了,那么这也是不符合一致性的要求


一般在定义一致性需求时,只要某些数据库操作满足原子性和隔离性规则,那么这些操作执行后的结果就会满足一致性需求

2.4 持久性(Durability)

当现实世界中一次状态转换之后,这个转换的结果将会永久的保留,这个规则称为持久性,持久性对应到数据库中的就是所修改的数据都应该在磁盘中保留下来,无论以后发生什么事故,本次转换造成的结果都不应该丢失

三、事务的概念及状态

事务是一个抽象的概念,它对应着一个或多个数据库操作
事务的不同状态:

  • 活动的:事务对应的数据库操作正在执行
  • 部分提交的:事务中的操作都执行完成,在由于这些操作都是在内存中执行的,并没有刷新到磁盘中,此时的状态称为部分提交的
  • 失败的:处于活动的或部分提交的状态时,可能遇到某些错误而无法继续执行,或人为的停止当前的事务,就说该事务处于失败状态
  • 中止的:事务执行了一部分后变为失败状态,将处于失败状态的事务回滚到最初事务还有没执行时的状态,称为中止状态
  • 提交的:处于部分提交状态的事务将修改过的数据都刷新到磁盘后,事务进入提交状态
    在这里插入图片描述

四、支持事务的引擎

在MySQL中只有InnoDB和NDB存储引擎支持事务,MyISAM是不支持事务的

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

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

相关文章

人工智能学习06--pytorch04--transforms

transforms主要对图片进行一些变换 transform该如何使用(python) 从transform中选择一个class,进行创建 依据创建的工具看需要什么(如img) 为什么需要tensor的数据类型 tensor数据类型:包装了神经网络…

opencv win10 4.7.0 源码编译 vs2019 cmake

下载opencv & opencv-contrib 4.7.0源码;注意下载地址https://github.com/opencv/opencv/releases https://github.com/opencv/opencv_contrib/releases/tag/4.7.0 版本要一模一样cmake输出文件夹为:opencv-4.7.0-build 遇到下载问题如下&#xf…

常见递归模式

常见递归模式递归模式遍历二叉树模式回溯模式子问题分解模式递归模式 常见递归模式: 遍历二叉树模式回溯模式子问题分解模式 遍历二叉树模式 只要涉及递归的问题,都是树的问题,或者说树的遍历。 void traverse(TreeNode root) { // 遍历…

混合背包问题

混合背包问题一、问题二、分析三、代码一、问题 二、分析 混合背包问题就是将我们之前讲过的01背包,完全背包,分组背包,多重背包问题等等中的任意几个混合在一起。因此想要解决这个问题,就需要对01背包,完全背包&…

PDF划词翻译软件

PDF划词翻译 一个简单的PDF划词翻译软件。 Github仓库地址:https://github.com/WCX1024979076/simple_pdf_translator Github下载地址: https://github.com/WCX1024979076/simple_pdf_translator/releases/tag/v0.1.0 Gitee仓库地址: htt…

ROS2机器人编程简述humble-第三章-COMPUTATION GRAPH .2

ROS2机器人编程简述humble-第三章-PERCEPTION AND ACTUATION MODELS .1避开障碍物计算图如何呢?该应用程序的计算图非常简单:订阅激光主题的节点向机器人发布速度命令。控制逻辑解释:输入的感知信息并产生控制命令(输出&#xff0…

深度学习:DenseNet思想总结

深度学习:DenseNet思想总结前言DenseNetResNetDense connectionComposite functionPooling layersGrowth rateBottleneck layersCompressionImplementation Details总结前言 论文中提出的架构为了确保网络层之间的最大信息流,将所有层直接彼此连接。为了…

JUC面试(八)——阻塞队列

阻塞队列 队列,FIFO BlockingQueue 阻塞队列,排队拥堵,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示: 线程1往阻塞队列中添加元素,而线程2从阻塞队列中移除元素 当阻塞队列是空…

Java基础(程序流程控制)

程序流程控制1..顺序结构程序从上到下逐行执行,中间没有判断和跳转2.分支结构根据条件,选择性执行某段代码有if-else和switch-case两种分支需要注意根据相应的方法,来输入指定类型的值。如果不匹配则会异常:InputMisMatchExceptio…

结构型模式-桥接模式

1.概述 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系: 我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试…

2.5总线标准

文章目录一、引子二、总线标准1.基本概念2.总线标准(1)系统总线①ISA②EISA扩展总线③拓展(2)局部总线①VESA②PCI③AGP④PCI-E(3)设备总线①RS-232C②SCSI③PCMCIA④USB3.连接硬盘总线标准①IDE②SATA三、…

JAVA 服务内存占用太高

一、问题现象 某天,运维老哥突然找我:“你们的某 JAVA 服务内存占用太高,告警了!GC 后也没释放,内存只增不减,是不是内存泄漏了!” 然后我赶紧看了下监控,一切正常,距离上…

redis缓存问题引进

1、缓存使用 为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而 db 承担数据落 盘工作。 哪些数据适合放入缓存?  即时性、数据一致性要求不高的  访问量大且更新频率不高的数据(读多,写少&…

BigDecimal BigInteger的使用

1、BigDiCemal 【问题】在项目中,我们进行计算的时候,有时候需要考虑 四舍五入,精度丢失的问题,面对这种问题,我们应该怎么处理? System.out.println(0.20.1);System.out.println(0.3-0.1);System.out.prin…

SEO中社交信号的重要性:Facebook分析

你可能认为 SEO中的社交信号是一些无用的社交账号,但它在搜索引擎优化中占有重要地位。Facebook是目前全球最大的社交媒体平台,它已经成为我们日常生活不可缺少的一部分。如何分析和利用好 Facebook,是我们学习 SEO的重中之重。在接下来的内容…

58 应用服务 hang 住, 导致服务 503 Service Unavailable

前言 这是之前 我们测试环境出现的一个问题 一个项目, 代码调整了之后, 发布到测试环境 之后, 几分钟之后 整个系统访问这个服务 出现了 "503 Service Unavailable", 然后 当时的处理方式为 临时重启服务 但是过了一会儿之后 同样的问题还是会出现, 导致 前端服务…

Functions重要部分

Functions1. Defining Functions2. Looking Up Names in Environments1. Defining Functions 赋值(Assignment)是一种简单的抽象方式:把值(values)和名称(names)联系起来。 定义函数&#xff0…

《从零开始编写一个直播服务器》 C++ 实现一个最简单的RTSP流媒体服务器

流媒体开发系列文章 文章目录流媒体开发系列文章前言一、rtsp流是什么?二、使用步骤1.服务器代码总结前言 在安防行业中,onvif协议与gb协议是两种标准,gb是国内安防行业的标准,onvif是国外的安防行业的标准,其中gb281…

AcWing 1013. 机器分配(分组背包问题与方案记录)

一、题目 二、思路 这道题其实不太容易看出背后的模型。这道题本质上是一个分组背包问题。我们将每一个公司看成一组,而在每一个组内,将不同情况下的盈利状况看作物品的价值,而得到这种利益所需的机器数目看作物品的体积。 因此&#xff0c…

SpringSession笔记

第一章、Session会话管理概述Session和Cookie回顾Session机制由于HTTP是无状态的协议,每次浏览器与服务器的交互过程就是一次对话,对话结束之后服务器不能记住你这个人。下次对话的时候服务端无法识别你是上次的人,所以需要一种机制来记录用户…