面试题之MySQL事物的特性

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

原子性:

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

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

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

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

如果事物提交后,redo log 刷入磁盘,结果MySQL迭机了,是可以根据redo log 去恢复 事务修改过的数据。

实现原子性的关键:当事务回滚时能够撤销已经执行的sql语句。

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

如果事务A 进行修改update 对应的user表后,那么此时就会把 修改前 的数据备份到 Undo buffer中,并持久化之对应 磁盘的Undo log中。接着事务B 进行 读取表数据时,也是读取的是 Undo log数据进行快照读。

一致性:

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

隔离性:

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

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

脏读:一个事务读取到了另外一个事务修改暂未提交的数据。(读取别人修改未提交)

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

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

数据库事务的隔离级别有4个,有低到高依次为 Read uncommitited(读未提交), Read committed(读已提交), Repeatable read(可重复读),Serializable(序列化),这四个级别可以逐个解决 脏读,不可重读读,幻读 这几类问题。

                                                                   

持久性:

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

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

ACID的总结:

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

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

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

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

MySQL的可重复读怎么实现的?

可重复读(repeatable read)定义: 一个事务 执行过程中看到的数据,

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】分布式监控 Zabbix

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Zabbix 介绍zabbix 概述Zabbix 监控原理Zabbix 6.0 新特性Zabbix 6.0 功能组件 Zabbix 6.0 部署Zabbix 添加客户端主机Zabbix 自定义监控内容Zabbix 自动发现与自动…

渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?

在上篇文章中,我们介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段,那今天我们接着讲解渲染流水线后面的阶段。 这里还是先简单回顾下上节前三个阶段的主要内容:在 HTML 页面内容被提交给渲染引擎之后,渲染引擎首先将 HTML 解析为浏览器可以理解的 DOM;然后根据 …

【iOS】ARC内存管理

内存管理 内存管理的思考方式iOS底层内存管理方式1. tagged pointer2. on-pointer iSA--非指针型iSA3. SideTables,RefcountMap,weak_table_t 内存管理有关修饰符__strong修饰符对象的所有者和对象的生命周期__strong对象相互赋值方法参数中使用__strong…

集群基础6——keepalived+lvs+apache

文章目录 一、环境说明二、安装apache三、配置keepalivedlvs3.1 配置lvs规则3.2 配置keepalived规则(主)3.3 配置keepalived规则(备) 四、验证 一、环境说明 先对两台后端服务器的httpd服务进行负载均衡,再对负载均衡服…

自建DNSlog服务器

DNSlog简介 在某些情况下,无法利用漏洞获得回显。但是,如果目标可以发送DNS请求,则可以通过DNS log方式将想获得的数据外带出来。 DNS log常用于以下情况: SQL盲注无回显的命令执行无回显的SSRF 网上公开提供dnslog服务有很多…

nginx高并发架构

1.前言 对于高并发的流量web架构,单纯的使用nginx是不够用的,nginx做七层代理需要处理数据,在大并发的情况下对主机资源的消耗就非常厉害了,所以此情况下就引入了lvs,使用lvs的四层转发功能,四层转发不需要…

【数学建模】 灰色预测模型

数学建模——预测模型简介 https://www.cnblogs.com/somedayLi/p/9542835.html 灰色预测模型 https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc&request_id&biz_id102&utm_term%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%…

SQL高级教程

SQL TOP 子句 TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 注释:并非所有的数据库系统都支持 TOP 子句。 SQL Server 的语法: SELECT TOP number|percent column_name(s) F…

Tensorflow入门(2)——深度学习框架Tesnsflow 线程+队列+IO操作 文件读取案例

目录 一、二、Tesnsflow入门 & 环境配置 & 认识Tensorflow三、线程与队列与IO操作1.队列实例:完成一个出队列、1、入队列操作(同步操作) 2.队列管理器 创建线程3.线程协调器 管理线程案例:通过队列管理器来实现变量加1,入队&#xff…

实操:用Flutter构建一个简单的微信天气预报小程序

​ 微信小程序是一种快速、高效的开发方式,Flutter则是一款强大的跨平台开发框架。结合二者,可以轻松地开发出功能丰富、用户体验良好的微信小程序。 这里将介绍如何使用Flutter开发一个简单的天气预报小程序,并提供相应的代码示例。 1. 准备…

10.25UEC++/小试牛刀(笨鸟先飞案例)

1.思路整理: 如何入手? 角色可能是每个游戏的最重要的部分,所以一般可以先从角色入手,如果游戏很复杂,可以进行拆分设计。 蓝图创建地图: 创建默认Pawn: 编写GameMode默认构造函数:…

【机器人模拟-02】 模拟移动机器人设置里程计

一、说明 在本教程中,我将向您展示如何设置移动机器人的测程。本教程是“机器人模拟”指南中的第二个教程。测量位移是仿真中的重要内容,设置测程的官方教程在此页面上,但我将逐步引导您完成整个过程。 您可以在此处获取此项目的完整代码。让我们开始吧! 二、ROS 2 中的里程…

dede编辑器修改成纯文本编辑器的方法

我在做优秀啦网站大全的时候需要的正文内容都不需要设置什么文字样式,所以我需要把编辑器上的工具全部取消掉,包括会员投稿中的编辑器工具栏全部取消掉或者屏蔽隐藏掉,所以我需要把DEDE编辑器修改成纯文本编辑器的方法如下:如图&a…

【Docker】Docker高级网络(NetWork)

【Docker】Docker高级网络(NetWork) 文章目录 【Docker】Docker高级网络(NetWork)1. 概述2. 网络2.1 网桥类型2.2 创建网络自定义桥2.3 查看所有网络2.4 查看特定网络的细节2.5 删除特定网络2.6 多个容器使用指定网络 参考文档:高级网络配置 Docker – 从入门到实践…

力扣小技巧:如何用最简单的方式实现小写字母转换

本篇博客会讲解力扣“709. 转换成小写字母”的解题思路,这是题目链接。 本题的解法非常简单,只需利用tolower函数即可。这个函数的作用是将所有大写字母转换为小写字母,而对其他字符不做任何改变。 char * toLowerCase(char * s){// 把字符串…

Spring接收前端传递数据的方式

搭建项目 然后点击下一步完成即可搭建成功 在pom文件中导入lombok的jar包,帮助我们快速创建实体类 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version> </dependency&…

外包软件定制开发中质量控制

引言 在外包软件定制开发项目中&#xff0c;确保交付的软件质量符合预期是至关重要的。由于外包团队通常是独立于企业的&#xff0c;他们可能没有对企业的业务需求和标准有深入的了解。因此&#xff0c;质量控制成为一个重要的挑战。本文将探讨外包软件定制开发中常见的质量控…

ubuntu安装单个redis服务

1.apt-get install redis-server 使用lighthouse用户这样操作会报与权限有关的错误&#xff0c; 改成使用root账号操作 2.安装完成后&#xff0c;Redis服务器会自动启动&#xff0c;查看进程是否正常启动 ps -axu|grep redis redis 18689 0.1 0.4 40136 6860 ? …

【深度学习】受限玻尔兹曼机 (RBM) 初学者指南

一、说明 受限玻尔兹曼机&#xff08;Restricted Boltzmann Machine&#xff0c;RBM&#xff09;是一种基于能量模型的人工神经网络。它只有一个隐层&#xff0c;将输入层和隐层中的每个神经元互相连接&#xff0c;但不同层的神经元之间没有连接。RBM是一种无向的概率图模型&am…

解决win11系统下vivado使用RTL分析闪退、小蓝熊easy anti chat无法启动问题

最近在接触使用vivado时被这个软件庞大的包体和繁多的报错搞得焦头烂额&#xff0c;经过多次尝试&#xff0c;我解决了两个困扰我许久的关乎软件正常使用的问题&#xff0c;将解决办法分享给大家。 一.RTL analysis运行闪退 这个问题关系到程序的正常使用&#xff0c;主要发生…