【MySQL进阶之路 | 高级篇】事务的ACID特性

1. 数据库事务概述

事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证给已提交到数据库的修改不会因为系统崩溃而丢失。

1.1 基本概念

事务:一组逻辑操作单元,使数据从一种状态变换到另一个状态。

事务处理的原则:保证所有事务都作为一个工作单元来执行,即使出了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事物都被提交(commit),那么这么修改都被永久的保存下来;要么数据库管理系统将放弃所作的所有修改,整个事物回滚到(rollback)到最初状态。

案例:

# AA给BB转账100元
update account set money = money - 100 where name = 'AA';
# 服务器故障
update account set money = money + 100 where name = 'BB';

1.2 事物的ACID特性

1). 原子性(atomicity):

原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。即要么转账成功,要么转账失败,是不存在中间的状态。如果无法保证原子性会怎么样?就会出现数据不一致的情形。A账户减去100元,而B账户增加100元操作失败,系统将无故丢失100元。

2). 一致性(consistency):

根据定义,一致性是指事务执行前后,数据从一个合法性状态变换到另外一个合法性状态。这种状态是语义上 的而不是语法上的,跟具体的业务有关。

那什么是合法的数据状态呢?满足预定的约束的状态叫合法的状态。通俗一点,这状态是由你自己来定义的(比如满足现实世界的约束)。满足这个状态,数据就是一致的,不满足这个状态,数据就是不一致的。如果事务的某个操作失败了,系统就会自动撤销当前正在执行的事务,返回到事务操作之前的状态。

举例:在数据表中我们将姓名字段设置为唯一性约束,这时当事务进行提交或者事务发生回滚时,如果数据表的姓名不唯一,就破坏了事务的一致性要求。

3). 隔离性(isolation):

事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。

4). 持久性(durability):

持久性是指一个事务一旦被提交了,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

持久性是通过事务日志来保证的。日志包括了重做日志和回滚日志。当我们通过事务对数据进行修改时,首先先将数据库的变化记录到重做日志,然后再对数据库中对应的行进行修改。这样做的好处是,即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事务具有持久性。

1.3 事务的状态

我们现在知道事务是一个抽象的概念,它其实对应着一个或多个数据库操作,MySQL根据这些擦操作所执行的不同阶段把事务分成几个状态:

  • 活动的(active):事务对应的数据库操作正在执行中时,我们就说该事务处于活动的状态。
  • 部分提交的(partially committed):当事务中的最后一个操作执行完成时,但由于操作都在内存层面上执行,所造成的影响并没有刷新到磁盘上,我们说该事务处于部分提交的状态。
  • 失败的(failed):当事务处于活动的或者部分提交的状态时,可能遇到了某些错误(数据库自身的错误,操作系统错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行,我们就说该事务处于失败的状态。
  • 中止的(aborted):如果事务执行的一部分变为失败的状态,那么就需要把已经修改的事务中的操作还原到事务执行前的状态。换句话说,就是要撤销失败事务对当前数据库造成的影响。我们把这个撤销的过程称之为回滚。当归滚操作shiwu执行完毕时,也就是数据库恢复到了执行事务的阶段之前的状态时,我们就说该事务处于终止的状态。
  • 提交的(committed)当一个处在部分提交的状态的事务将修改过的数据都同步到磁盘上之后,我们就说该事务处在了提交的状态。

一个基本的状态转换图如下:

816158ee222344d2a50e7bba7a248c56.png

图中可见,只有当事务处于提交的或者中止的状态时,一个事务的生命周期才算结束了。对于已经提交的事务来说,该事务对数据库所做的修改将永久生效,对于处在中止状态的事务,该事务对数据库所做的修改都会被回滚到没执行该事务之前的状态。

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

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

相关文章

AI学习记录 - 激活函数的作用

试验,通过在线性公式加入激活函数,可以拟合复杂的情况(使用js实现) 结论:1、线性函数的叠加,无论叠加多少次,都是线性的 如下图 示例代码 线性代码,使用ykxb的方式,叠加10个函数…

力扣 快慢指针

1 环形链表 141. 环形链表 - 力扣(LeetCode) 定义两个指针,一快一慢。慢指针每次只移动一步,而快指针每次移动两步。初始时,慢指针和快指针都在位置 head,这样一来,如果在移动的过程中&#x…

【单片机毕业设计选题24080】-老人外出监护系统设计

系统功能: 系统上电后,OLED显示“欢迎使用智能监护系统请稍后”两秒后进入正常页面显示。 第一行显示体温和心率值。 第二行显示压力值。 第三行显示经度值。 第四行显示纬度值。 注:经纬度信息需要在室外有信号的地方才会有显示。 短按B3按键向指…

【BUG】已解决:No Python at ‘C:Users…Python Python39python. exe’

No Python at ‘C:Users…Python Python39python. exe’ 目录 No Python at ‘C:Users…Python Python39python. exe’ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班…

函数-递归调用

目录 一、基本介绍 二、递归能解决什么问题? 三、递归案例 1、打印问题 2、阶乘问题 四、递归重要规则 五、课堂练习 1、斐波那契数 2、猴子吃桃问题 3、汉诺塔 一、基本介绍 1、简单地说:递归就是函数自己调用自己,每次调用时传入…

react中配置路径别名@

1.说明 在react项目中想要使用代替“src/”需要在项目根目录下配置两个文件,craco.config.js和sconfig.json; craco.config.js配置文件是用于项目解读为“src/” jsconfig.json配置文件是用于vsCode在编辑过程是输入后可以将src下的文件目录进行自动联…

阿里云OS Copilot:解锁操作系统运维与编程的智能助手

目录 引言 OS Copilot简介 OS Copilot的环境准备 创建实验资源 安全设置 设置安全组端口 创建阿里云AccessKey 准备系统环境 OS Copilot的实操 场景一、用OS Copilot写脚本和注释代码 场景二、使用OS Copilot进行对话问答 场景三、使用OS Copilot辅助编程学习 清理…

腾讯云k8s相关

1.某个服务腾讯云内网地址? 比如:spiderflow-web正式环境:http://spiderflow-web.sd-backend:30001 试一试:

前端使用 Konva 实现可视化设计器(17)- 素材嵌套 - 生成阶段

本章主要实现素材的嵌套(生成阶段)这意味着可以拖入画布的对象,不只是图片素材,还可以是嵌套的图片和图形。在未来的章节中,应该可以实现素材成组/解散的效果。 最近难以抽出时间继续本示例更新,以至于拖到…

C语言数据结构课设:基于EasyX前端界面的飞机订票系统

数据结构课程设计说明书 学 院、系: 软件学院 专 业: 软件工程 班 级: 学 生 姓 名: 范 学 号: 设 计 题 目: 飞机订票系统 起 迄 日 期: 2024年6月18日~ 20…

兰州交通大学电子与信息工程学院师资能力提升培训班圆满结束

7月21日,兰州交通大学电子与信息工程学院携手泰迪智能科技开展的“师资能力提升培训班(兰州交通大学电子与信息工程学院专场)”圆满结束,电子与信息工程学院副院长申东、泰迪智能科技区域总监曹玉红,教学组代表杨惠及电…

今日科普:什么是脑血管畸形,该怎么治疗?

谈及脑血管疾病,人们往往存在一种误解,认为这是老年群体的专属问题。然而,事实并非如此,尤其是脑动静脉畸形(AVM)这一特殊类型,它更倾向于侵袭20至40岁的青壮年人群。那么,脑血管畸形…

Transformer是什么?如何理解Transformer?

一、Transformer是什么 Transformer是一种深度学习模型架构,最初由Google的研究团队在2017年提出。这种架构最早用于自然语言处理(NLP),但后来也在其他领域表现出色。Transformer的关键特点是其自注意力机制(Self-Att…

第20讲:EtherCAT网络基础

EtherCAT概述 一、定义 二、EtherCAT原理 1、以太网帧通过到站不停车的方式进行数据交换 (1)如图,当中走过的就是以太网帧。当它经过从站的时候不会停留,但是它会跟从站进行信息交互。 即会把从站需要发送的信息给到了以太网帧里面去,然后把从站需要的信息,从以太网帧里…

河南萌新联赛2024第(二)场:南阳理工学院

A 国际旅行Ⅰ D A*BBBB F 水灵灵的小学弟 H 狼狼的备忘录 I 重生之zbk要拿回属于他的一切 J 这是签到 ##A 国际旅行Ⅰ 链接:https://ac.nowcoder.com/acm/contest/87255/A 来源:牛客网 题目描述 很久很久以前,有 n n n 个国家,第…

构建一个具有深色模式的简单React Web应用

在当今的Web开发世界里,创建一个既美观又功能丰富的用户界面是至关重要的。在本文中,我们将探讨如何使用React构建一个简单但功能强大的Web应用,它包含导航栏、内容展示区域和深色模式切换功能。 项目概述 我们的目标是创建一个具有以下特性的Web应用: 左侧导航栏,包含四个链…

MySQL 约束 (constraint)

文章目录 约束(constraint)列级约束和表级约束给约束起名字(constraint)非空约束(no null)检查约束(check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 (auto_increment) 外键约束外什…

IP协议和路由转发

文章目录 IP协议IP报头网段划分特殊的IP私有IP和公有IP IP分片 路由 IP协议 IP协议提供了一种能力,将数据报从A主机送到B主机,TCP可以保证可靠性,所以TCP/IP协议可以将数据可靠的从A主机送到B主机。 IP报头 4位版本号(version): 指定IP协议…

Unity UGUI 之 Slider

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.Slider是什么 滑块,由三部分组成:背景 填充条 手柄 填充条就是…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染!这一次内容比较多,我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步,还是老规矩,先准备好接口函数。方便我们的页面组件拿到对…