面试题之MySQL事物的特性和锁

news2024/11/17 6:29:41

在关系性数据库管理系统配置,一个逻辑工作要成为事物,必须要满足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)定义: 一个事务 执行过程中看到的数据,

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

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

相关文章

Maven安装步骤

Maven官网下载安装包: https://maven.apache.org/download.cgi Maven下载官网 解压安装包 在环境变量中配置 MAVEN_HOME 和 Path 打开cmd,输入mvn -v查看安装成功

用Inno Setup6.2.1对Pyinstaller打包的python可执行文件exe做代码签名,签名工具用微软件SignTool

说明:使用本博文的前提条件是,你已经将代码打包成可执行文件exe,现在是用Inno Setup6.2.1做安装包,以及给exe、及安装包exe、卸载exe做代码签名 一、准备工具 1、下载 下载 https://visualstudio.microsoft.com/zh-hans/visual-…

简单扫码登录原理分析与本地测试

前言 参考:https://www.cnblogs.com/johnlearning/p/16205875.html 前言:简单分析扫码登录流程。 场景:以网页版微信为例,我们在 PC 端点击二维码登录后,浏览器页面会弹出二维码图片,此时打开手机微信扫…

本地存储之indexedDB的操作api -- localforage的使用

文章目录 概述增删改查操作工具类封装前端api前端关键接口调用(以年度举例,其他维度类似)列表获取添加内容修改内容 概述 本地存储有好几种,每种的优缺点本文就不赘述了,一搜一大堆。 本文只介绍indexedDB的使用。 能…

Redis实现分页+多条件模糊查询组合方案

导言 Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需要分页、排序以及条件查询的场景时(如评论&…

spring boot 集成dubbo

本demo使用spring boot 2.4.1版本集成 dubbo 2.7.15 1.创建maven项目及其子模块 父工程pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.ap…

个人微信开发API,微信机器人开发

安卓微信的api&#xff0c;个人微信开发API协议&#xff0c;微信 ipad &#xff0c;微信ipad协议&#xff0c;微信web版接口api&#xff0c;微信网页版接口&#xff0c;微信开发sdk&#xff0c;微信开发API&#xff0c;微信协议&#xff0c;微信接口文档&#xff0c;网页个人微…

不清晰的照片怎么变清晰?这几个方法轻松处理!

大家都会碰到老旧照片放大后变得模糊不清的情况&#xff0c;可惜我们无法在网上下载原图&#xff0c;这是我们自己的照片。那有没有简便的方法修复模糊照片呢&#xff1f;很多人会提到使用PS&#xff0c;但操作复杂需要基本技能。除了PS&#xff0c;还有其他方法修复模糊照片。…

图片速览 Deep k-Means: Jointly clustering with k-Means and learning representations

本文探讨了联合聚类与学习的问题 交涉。正如之前的几项研究表明&#xff0c;学习 既忠实于要聚类和调整的数据的表示形式 到聚类算法可以导致更好的聚类性能&#xff0c;所有的 更重要的是&#xff0c;这两项任务是联合执行的。我们在这里提出这样一个 方法的k-基于连续重新参数…

每天一道C语言编程练习(5):尼科彻斯定理

题目描述 验证尼科彻斯定理&#xff0c;即&#xff1a;任何一个整数m的立方都可以写成m个连续奇数之和。 输入格式 任一正整数 输出格式 该数的立方分解为一串连续奇数的和 样例输入 13 样例输出 13*13*132197157159161163165167169171173175177179181 代码如下&#…

【前端知识】React 基础巩固(二十七)——Fragment

React 基础巩固(二十七)——Fragment Fragment Fragment 允许将子列表分组&#xff0c;而无需向 DOM 添加额外节点可以采用语法糖<></>来替代 Fragment&#xff0c;但在需要添加 key 的场景下不能使用此短语 import React, { PureComponent, Fragment } from &q…

VUE之基本部署及VScode常用插件

参考资料&#xff1a; 参考视频 VScode常用插件清单 node.js官网 node.js官网中文版 VUE官方文档 VScode常用插件&#xff1a; VScode常用插件详解见上述连接&#xff0c;插件列表如下&#xff1a; VScode的注释/取消注释快捷键为&#xff1a;Ctrl/ VUE的基本安装部署--…

shardingsphere mybatisplus properties和yml配置实现、分页配置

shardingsphere mybatisplus properties和yml配置实现 目录结构 model package com.oujiong.entity;import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format…

【JAVA】——环境配置安装

一.Java简介 1.1 Java的特点 Java是一种跨平台、面向对象的程序设计语言&#xff0c;用它编写的程序可以在任何计算机操作系统和支持Java的硬件设备上运行。Java是一种通过解释方式来执行的语言&#xff0c;那么什么是解释方式呢&#xff1f; 程序员编写的代码一般都是用高级语…

程序员的自我修养(2)

目标文件的学习 1.什么是目标文件以及格式 目标文件为编译器编译后生成的文件&#xff0c;就是window下的.obj&#xff0c;linux下的.o文件。与可执行文件格式几乎一样&#xff0c;因为只是缺少链接过程。所以可执行文件&#xff0c;动态链接库&#xff0c;静态链接库&#xf…

B070-项目实战-用户模块--手机注册

目录 用户模块需求分析静态网站部署与调试两种前端项目的部署两种前端项目的调试(热部署)创建静态web项目 注册分析与设计分析需求设计 界面设计&#xff08;ui&#xff09;设计表&#xff08;后台&#xff09; 流程设计&#xff08;后台&#xff09;三范式表设计流程设计 相关…

英语动词-分类及应用

文章目录 1.实义动词系动词情态动词 1.实义动词 实义动词是表示具体动词的词。 常见的分类&#xff1a;及物动词和不及物动词。 1.及物动词&#xff1a;transitive verb后面直接加宾语&#xff0c;并且必须加宾语。比如&#xff1a;I love you.I buy a book. 2.不及物动词&…

AI 智能对话 - ChatGLM2-6B 本地搭建入门

前情提要 这一个月来干了啥事情呢&#xff1f;AI 绘画搞了2周左右&#xff0c;SD 建筑绘图&#xff0c;训练 LORA &#xff0c;模型控制基本也上手了&#xff0c;可以按照预期生成自己想要的东西&#xff0c;那种控制感是挺开心的&#xff0c;不然你输入一句话生成 AI 图片完全…

Linux进程(三)---深入理解进程地址空间

目录 地址空间的划分及验证 所谓的地址空间是内存吗&#xff1f; 一种奇怪的现象(虚拟地址的引入) 什么是进程地址空间&#xff1f; 我们平常访问到的内存是物理内存吗&#xff1f; 深入理解区域划分 再谈奇怪的现象 fork()中为什么一个变量可以同时保存两个不同的值 …

网络安全—入职大厂经验之谈

大三想去实习&#xff0c;趁现在该干什么才能去大厂实习呢&#xff1f;想做一些事丰富一下自己的简历&#xff0c;只有打ctf&#xff1f;还是挖洞&#xff1f;非常迷茫。 或者入职转行网络安全行业应该怎么做&#xff1f;对于接下来的职业规划学习计划有什么打算&#xff1f; …