java八股文面试[数据库]——MySQL中事务的特性

news2024/11/25 4:47:19

在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

1)原子性

原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

InnoDB存储引擎提供了两种事务日志redo log(重做日志)和undo log(回滚日志)。其中redo log用于保证事务持久性;undo log则是事务原子性和隔离性实现的基础。

image.png

每写一个事务,都会修改Buffer Pool,从而产生相应的Redo/Undo日志:

  • 如果要回滚事务,那么就基于undo log来回滚就可以了,把之前对缓存页做的修改都给回滚了就可以了。

  • 如果事务提交之后,redo log刷入磁盘,结果MySQL宕机了,是可以根据redo log恢复事务修改过的缓存数据的。

实现原子性的关键,是当事务回滚时能够撤销所有已经成功执行的sql语句。

InnoDB 实现回滚,靠的是undo log :当事务对数据库进行修改时,InnoDB 会生成对应的undo log ;如果事务执行失败或调用了rollback ,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

image.png

2)一致性

一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束

  • 约束一致性:创建表结构时所指定的外键、唯一索引等约束。

  • 数据一致性:是一个综合性的规定,因为它是由原子性、持久性、隔离性共同保证的结果,而不是单单依赖于某一种技术。

image.png

3)隔离性

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

不考虑隔离性会引发的问题:

  • 脏读 : 一个事务读取到了另一个事务修改但未提交的数据。

  • 不可重复读: 一个事务中多次读取同一行记录的结果不一致,后面读取的跟前面读取的结果不一致。

  • 幻读 : 一个事务中多次按相同条件查询,结果不一致。后续查询的结果和面前查询结果不同,多了或少了几行记录

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。

4)持久性

持久性:指的是一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,后续的操作或故障不应该对其有任何影响,不会丢失。

MySQL 事务的持久性保证依赖的日志文件: redo log

  • redo log 也包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。redo log是物理日志,记录的是数据库中物理页的情况 。

  • 当数据发生修改时,InnoDB不仅会修改Buffer Pool中的数据,也会在redo log buffer记录这次操作;当事务提交时,会对redo log buffer进行刷盘,记录到redo log file中。如果MySQL宕机,重启时可以读取redo log file中的数据,对数据库进行恢复。这样就不需要每次提交事务都实时进行刷脏了。

image.png

5)ACID总结

  • 事务的持久化是为了应对系统崩溃造成的数据丢失.

  • 只有保证了事务的一致性,才能保证执行结果的正确性

  • 非并发状态下,事务间天然保证隔离性,因此只需要保证事务的原子性即可保证一致性.

  • 在并发状态下,需要严格保证事务的原子性、隔离性。

image.png

知识来源:马士兵教育

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

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

相关文章

[移动通讯]【Carrier Aggregation-3】【5G】

前言: 参考: 5G Mobile Communications:《Carrier Aggregation in 5G》 目录: 1: carrier Allocation Schemes 2: 网络结构 3: LTE CA 4: 5G CA 一 Carrier Allocation Schemes CA 主要作用…

问脉基础调研

基本功能: 资产清点 清点镜像、镜像软件资产数据与详细信息清点容器、应用软件资产数据与详细信息清点集群、Pod、Service、Ingress、Secrets 等数十种资产数据与详细信息提供资产与资产、资产与事件关联查看提供仪表盘总览当前检测对象数据情况 镜像安全 镜像漏…

Text文件在MATLAB中读写示例基础

背景 为了便于和外部程序进行交换,以及查看文件中的数据,也常常采用文本数据格式与外界交换数据。在文本格式中,数据采用ASCII码格式,可以使用字母和数字字符。可以在文本编辑器中查看和编辑ASCII文本数据。MATLAB提供了导入函数…

raise EOFError(“No data left in file“) EOFError: No data left in file

在linux服务器里跑分割模型的时候出现了以下错误,但是在自己电脑上运行相同程序时没有错误,可以运行。 ise EOFError(“No data left in file”) EOFError: No data left in file 到底是因为什么? GPT给的回答: “EOFError: No …

3dMax全球学习资源、资源文件和教程 !

此样例教育教程和学习资源旨在提供使用Autodesk 3ds Max时的计划知识和培训、正确的工作流、流程管理和最佳实践。 您在Autodesk三维设计领域的职业生涯 有关使用3ds Max和Maya在计算机图形领域开始职业生涯的提示(包括新的3ds Max和Maya介绍教程,以复…

js reduce求和

let unReadCount resultList.reduce((pre, cur) > {return pre cur.unReadCount}, 0)

自动气象站:无线数据传输、多场景应用

自动气象站能够和环境监控云平台组成气象环境监控系统,能够全天候无人值守地监测气象要素,实现实时监测和数据传输,具有多要素集成、无线数据传输、多场景应用的优势。 一、自动气象站可以全天候不间断地监测空气温度、湿度、大气压力、雨量…

Gin框架---环境搭建

目录 一:MAC安装Go环境二:配置Go相关的环境变量三:设置GO国内代理四:GoLand初始化项目五:安装GIN框架六:Gin框架演示 一:MAC安装Go环境 Go官网地址:https://golang.google.cn/dl/直…

输入部件 QComboBox --组合框/下拉列表

QComboBox 类是 QWidget 类的直接子类,该类实现了一个组合框 一、QComboBox 类中的 属性 QComboBOx 类(组合框)属性速查表属性名说明属性名说明count获取项目数量minimumContentsLength组合框中最少字符数maxCount允许的最大项数maxVisibleItems向用户显示的最大项…

计算机网络第三章——数据链路层(中)

数声风笛离亭晚,君向潇湘我向秦 文章目录 ALOHA协议CSMA协议CSMA/CD协议CSMA/CA协议 总线型和星型都是广播式通信,看一下目的地址是否是我,若是我就接受否则就丢弃,总线型就是若是有一个断了则会影响其他的,型型的就是…

报错:为什么数组明明有内容但打印的length是0

文章目录 一、问题二、分析三、解决1.将异步改为同步2.设置延迟 一、问题 在日常开发中,for 循环遍历调用接口,并将接口返回的值进行拼接,即push到一个新的数组中,但是在for循环内部是可以拿到这个新的数组,而for循环…

接口测试工具开发文档

1 开发规划 1.1 开发人员 角 色 主要职责 负责模块 人员 备注 n xxx模块 xxx 1.2 开发计划 <附开发计划表> 1.3 开发环境和工具 开发工具 工具 作用 Notepad 编辑器 Perl 解释器 2 总体设计 设计思路&#xff1a;因为测试app和server。首先必须…

vue3中使用viewerjs实现图片预览效果

vue3中使用viewerjs实现图片预览效果 1、前言2、实现效果3、在vue3项目中使用viewer.js3.1 安装3.2 在main.js中引入3.3 组件中使用 1、前言 viewer.js是一款开源的图片预览插件&#xff0c;功能十分强大: 支持移动设备触摸事件支持响应式支持放大/缩小支持旋转&#xff08;类…

CPU及并发

2.9G Hz,即每秒进行2.9G次运算(即29亿次) 几个命令 us: 用户使用的cpu sy: 系统(内核)使用的cpu id: idle,即空闲cpu wa: 等待I/O的cpu st: 开虚拟机后会有的一个指标,即虚拟机的cpu使用率 一个进程拥有一整套虚拟地址空间,该进程的所有线程都共享该地址空间. 线程是CPU运算的最…

Docker如何安装seafile

SQLite 方式 要在 Docker 中安装 Seafile&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装 Docker&#xff1a;确保您的系统上已经安装了 Docker。您可以根据您的操作系统类型&#xff0c;在官方网站上找到适合您系统的 Docker 版本并进行安装。 下载 Seafile 镜像&…

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理——排列组合——涂色

⛲️ 一、考点讲解 1.题目特征 如果给几种颜色来填涂所给的图形&#xff0c;就是涂色问题。 2.解题方法 可以按照图形逐一依次填涂&#xff0c;也可以按照所用颜色的种数进行分类讨论。 二、考试解读 &#xff08;1&#xff09;涂色问题一般要求相邻的颜色不能相同&#xff0c…

2023年9月9日(星期六)骑行笔架山

2023年9月9日 (星期六)&#xff1a;骑行笔架山&#xff0c;早8:30到9:00&#xff0c; 大观楼门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点: 大观楼门囗集合&#xff0c;家住东&#xff0c;南&#xff0c;北…

将Vivado设为xpr文件的默认打开方式

在linux上安装vivado后不会将vivado设为默认的打开方式&#xff0c;需要修改部分gnome配置文件解决。本文基于RHEL 8.8&#xff08;gnome 3.32.2&#xff09;编写&#xff0c;所涉及的文件路径可能因gnome版本而异。 操作步骤 1. 新增xpr文件类型&#xff08;可选&#xff0c;…

【zookeeper】ZooKeeper的特点及应用场景

ZooKeeper 的特点/设计目标 ZooKeeper&#xff08;动物园管理员&#xff09; &#xff0c;顾名思义&#xff0c;是用来管理Hadoop&#xff08;大象&#xff09;、Hive&#xff08;蜜蜂&#xff09;、Pig&#xff08;小猪&#xff09;的管理员&#xff0c;同时Apache HBase、Ap…

人工神经网络实验:第一次上机

pratice03&#xff1a; 1.问题描述&#xff1a; 就是通过设置只有一个hidden层的神经网络&#xff0c;对一个平面的灰面和白面进行分类 2.完整代码&#xff1a; # 可提供解题和验证代码&#xff0c;自行产生数据import torch import torch.nn as nn import torch.nn.functi…