MySQL高级第十二篇:数据库事物概述和隔离级别

news2024/11/24 14:37:19

MySQL高级第十二篇:数据库事物概述和隔离级别

  • 一、数据库事物概述
    • 1. SHOW ENGINES 查看存储引擎
    • 2. 事物ACID特性
      • 原子性(atomiity)
      • 一致性(consistency):
      • 隔离性(isolation)
      • 持久性(durability):
      • 总结
    • 3. 事物的状态
  • 二、事物的隔离级别

一、数据库事物概述

  • 事物:一组逻辑操作单元,使数据从一种状态变成另一种状态,这一组逻辑操作要么全部成功,要么全部放弃。

1. SHOW ENGINES 查看存储引擎

在这里插入图片描述
可以看出,在MySQL中,只有 InnoDB 支持事物。

2. 事物ACID特性

原子性(atomiity)

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

一致性(consistency):

  • 一致性是指事务执行前后,数据从一个 合法性状态 变换到 另外一个合法性状态。这种状态是语义上的,而不是语法上的,跟具体的业务有关。
  • 什么是合法的数据状态?满足预定的约束的状态就叫做合法的状态。通俗一点,这状态是由你自己来定义的
    (比如满足现实世界中的约束)。满足这个状态,数据就是一致的,不满足这个状态,数据就是不一致的!如果事务中的某个操作失败了,系统就会自动撤销当前正在执行的事务,返回到事务操作之前的状态。
  • 比如,还是银行卡转账,要转账,你的余额就要大于0,并且转账金额不能大于余额,比如你有100,却想转出200,当然不行了,账户肯定不能为 -100,这就叫数据一致性。

隔离性(isolation)

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

持久性(durability):

  • 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应
    该对其有任何影响。
  • 持久性是通过事务日志来保证的。日志包括了重做日志和回滚日志。当我们通过事务对数据进行修改的时候,首先会将数据库的变化信息记录到重做日志中,然后再对数据库中对应的行进行修改。
  • 这样做的好处是,即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事务具有持久性。

总结

  • ACID是事务的四大特性,在这四个特性中,原子性是基础,隔离性是手段,一致性是约束条件,而持久性是我们的目的

3. 事物的状态

  • 活动的(active)

    • 事务对应的数据库操作正在执行过程中时,我们就说该事务处在活动的状态。
  • 部分提交的(partially committed)

    • 当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时,我们就说该事务处在部分提交的状态。
  • 提交的(committed)

    • 当一个处在部分提交的状态的事务将修改过的数据都同步到磁盘上之后,我们就可以说该事务处在了提交的状态。
  • 失败的(failed)

    • 当事务处在活动的或者部分提交的状态时,可能遇到了某些错误(数据库自身的错误、操作系统错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行,我们就说该事务处在失败的状态。
  • 中止的(aborted)

    • 如果事务执行了一部分而变为失败的状态,那么就需要把已经修改的事务中的操作还原到事务执行前的状
      态。
    • 换句话说,就是要撤销失败事务对当前数据库造成的影响。我们把这个撤销的过程称之为回滚。当回滚操作执行完毕时,也就是数据库恢复到了执行事务之前的状态,我们就说该事务处在了中止的状态。
      在这里插入图片描述

二、事物的隔离级别

  • 读未提交
    • 所有事物都可以看到其他未提交事物的执行结果
    • 问题:脏读、幻读、不可重复读
  • 读已提交
    • 只能看到已经提交的事物所做出的改变
    • 解决:脏读
    • 问题:幻读、不可重复读
  • 可重复读MySQL默认
    • 事物A读到一条数据后,事物B对该数据进行了修改并提交,事物A再读该数据,读到的还是原来内容
    • 解决:脏读、不可重复读
    • 问题:幻读
  • 序列化/串行化
    • 确保事物可以从一个表中读取相同的行,在此事物执行期间,禁止其他事物操作
    • 解决:脏读、幻读、不可重复读
    • 问题:性能低

在这里插入图片描述

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

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

相关文章

使用java实现自动扫雷

写在前面 本项目已在github开源,链接https://github.com/QZero233/JavaAutoMinesweeper 本文的写作风格可能会有些奇怪,这是笔者的一次全新的尝试,后续会换回写blog的文风的 摘要 本文提出了一个全自动完成扫雷游戏的解决方案,…

【Kubernetes】 多云管理策略解析

文章目录Kubernetes 多云的实现1. 前言1.1 Kubernetes 多云的现实需求2. Kubernetes 多云的架构设计2.1 跨云 Kubernetes 的挑战2.1.1 不同云厂商的接口不兼容2.1.2 多云环境中的安全问题2.1.3 跨云环境中的网络问题2.2 Kubernetes 多云的架构设计2.2.1 统一网络管理2.2.2 使用…

新能源汽车高压配电管理(PDU/BDU)

一、概念与组成 PDU(Power Distribution Unit),即高压配电单元,功能是负责新能源车高压系统中的电源分配与管理,为整车提供充放电控制、高压部件上电控制、电路过载短路保护、高压采样、低压控制等功能,保护和监控高压系统的运行…

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法

错误场景 最近在开发React的前端微应用,启动时模块构建报错Module build failed, Error: EMFILE: too many open files, 如下图所示: Error: EMFILE: too many open files的错误,经排查是因为单个微应用项目较大,发…

【Linux安装数据库】Ubuntu安装mysql并连接navicat

Linux系统部署Django项目 文章目录Linux系统部署Django项目一、mysql安装二、mysql配置文件三、新建数据库和用户四、nivacat链接mysql一、mysql安装 linux安装mysql数据库有很多教程,根据安装方式不同,相关的步骤也不同。可以参考:【Linux安…

前端基础(HTML、CSS、JS、jQuery)

文章目录一、HTML基础1.1 常用标签(表格、表单、按钮等)1.2 其他一些标签(书签、显示效果、缩写等)二、CSS基础2.1 CSS引入方式2.2 CSS选择器2.3 CSS常用属性三、JavaScript3.1 JS使用方式3.2 变量和数据类型3.3 函数、作用域、条…

Unity基础框架从0到1(五)延时任务调度模块

索引 这是Unity基础框架从0到1的第五篇文章,前面的文章和对应的视频我一起列到这里: 文章 Unity基础框架从0到1 开篇 Unity游戏框架从0到1 (二) 单例模块 Unity基础框架从0到1(三)高效的全局消息系统 Unity基础框架从0到1&a…

CentOS 7 DNS服务器架设

CentOS 7 DNS服务器部署 项目背景和要求 要保证即能够解析内网域名linuxidc.local的解析,又能解析互联网的域名。 主DNS服务器:ZZYH1.LINUXIDC.LOCAL 辅助DNS服务器:ZZYH2.LINUXIDC.LOCAL 包含以下域的信息: 1、linuxidc.lo…

mybatis多表联查(一对一、一对多/多对一、多对多)

mybatis多表联查(一对一、一对多/多对一、多对多) 在开发过程中单表查询往往不能满足需求分析的很多功能,对于比较复杂业务来说,关联的表有几个,甚至是几十个并且表与表之间的关联相当复杂。为了能够实现复杂的功能业务,就必须进…

Java 并发工具合集 JUC 大爆发!!!

并发工具类 通常我们所说的并发包也就是 java.util.concurrent (JUC),集中了 Java 并发的各种工具类, 合理地使用它们能帮忙我们快速地完成功能 。 1. CountDownLatch CountDownLatch 是一个同步计数器,初始化的时候 传入需要计数的线程等待数…

Monaco Editor编辑器教程(二七):集成多个GitLab编辑器颜色样式主题

前言 在开发编辑器时,未来满足开发者的审美需求,有时需要设计多套颜色主题,最基础的是黑色主题和白色主题。如果用户愿意出钱的话,可以加上一些其他花里胡哨的颜色主题,在vscode中是可以搜到。今天就来教大家一些,如何借助现成的资源来为自己的monaco编辑器增加丰富的颜…

JavaScript控制语句及搭建前端服务器

目录 一、for in 二、for of 三、try catch 四、搭建前端服务器 (1)安装nvm (2)检查npm (3)搭建前端服务器 一、for in 主要用来遍历对象 let father {name:张三, age:18, study:function(){}};f…

Linux常用的网络命令有哪些?快速入门!

在Linux系统中,有许多常用的网络命令可以用来进行网络配置和故障排除。这些命令可以帮助我们了解网络的状态和性能,并且可以快速诊断和解决网络问题。在本文中,我们将介绍一些常用的Linux网络命令,并提供一些案例来帮助您更好地理…

高数基础2

目录 函数的极限: 自变量趋向于有限值时函数的极限 左右极限 需要分左右极限的三种问题: 例题: 极限性质: 函数的保号性: 函数的保号性: 例题: 极限值与无穷小的关系 极限存在准则&#…

FRRoute 路由信息采集 + MPLS VPN隧道信息采集与识别

FRRoute 路由信息采集 MPLS VPN隧道信息采集与识别FRRoute数据库-表路由信息采集命令输出字段 -> 映射到 -> 数据库字段数据结构 算法show int brroute -nshow interfaces loMPLS VPN隧道信息采集与识别step 1 : 采集mpls邻居表step 2 : MPLS 隧道识别FRRoute 数据库-…

RK3568平台开发系列讲解(Linux系统篇)线程 pthread 详解

🚀返回专栏总目录 文章目录 一、POSIX 线程模型二、pthread_create()创建线程三、线程属性3.1、初始化线程对象属性3.2、销毁一个线程属性对象3.3、线程的分离状态3.4、线程的调度策略3.5、线程的优先级3.6、线程栈四、线程退出五、回收已终止线程的资源沉淀、分享、成长,让…

Word处理控件Aspose.Words功能演示:使用C#创建MS Word文档

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…

苹果6信号不好的快速解决方法

许多朋友反馈,苹果6的信号不佳,建议从以下方面查找: 方法一:开启飞行模式后再关闭 有时候手机由于周围环境网络比较差,会导致信号处于无服务状态,这时后我们开启飞行模式后再关闭飞行模式,系统就…

反序列化漏洞及PHP魔法函数

目录 1、漏洞原理 2、序列化(以PHP语言为例) 3、反序列化 4、PHP魔法函数 (1)__wakeup() (2)__destruct() (3)__construct() (4)__toString() &…

Arduino UNO驱动micro SD卡读写模块

目录一、简介二、使用前准备三、测试方法四、实验现象一、简介 Micro SD卡模块TF卡读写卡器板载电平转换电路,即接口电平可为5V或3.3V,支持支持Micro SD卡(≤2G)、Micro SDHC高速卡(≤32G)。供电电源为4.5V~5.5V,板载3.3V稳压电路&#xff0…