MySQL 面试突击指南:核心知识点解析2

事务并发可能引发的问题

MySQL 是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有多个客户端与之连接,每个客户端与服务器连接后,可以称为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是说,服务器可能同时处理多个事务。

1. 脏读 (Dirty Read)

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

脏读示例

  1. 在事务 A 执行过程中,事务 A 对数据资源进行了修改,事务 B 读取了事务 A 修改后的数据。
  2. 如果事务 A 没有提交,而是回滚了(Rollback),则事务 B 读取的数据就是脏数据。

这种读取到另一个事务未提交的数据的现象就是脏读。

2. 不可重复读 (Non-repeatable Read)

不可重复读指的是在同一个事务中,两次读取同一记录时,结果不一致。

不可重复读示例

事务 B 读取了两次数据资源,在这两次读取的过程中,事务 A 修改了数据,导致事务 B 在这两次读取出来的数据不一致。

3. 幻读 (Phantom Read)

幻读是在事务执行过程中,另一个事务向事务正在读取的记录集中插入了新记录,导致前后读取结果不一致。

幻读示例

事务 B 前后两次读取同一个范围的数据,在两次读取的过程中,事务 A 新增了数据,导致事务 B 后一次读取到前一次查询没有看到的行。幻读强调读取到了之前未存在的记录。

什么是 MVCC?

MVCC (Multi-Version Concurrency Control),基于多版本的并发控制协议,是乐观锁的一种实现方式。它避免了许多加锁操作,降低了开销。MVCC 通过创建快照,允许多个事务并发读取不同版本的数据,从而实现读不加锁,读写不冲突,极大地提升了系统的并发性能。

InnoDB 支持的四种事务隔离级别及其区别

事务并发执行过程中可能遇到的一些问题按照严重性排序为:脏读 > 不可重复读 > 幻读。SQL 标准设立了四个隔离级别:

READ UNCOMMITTED:未提交读,可能发生脏读、不可重复读和幻读问题。
READ COMMITTED:已提交读,可能发生不可重复读和幻读问题,不会发生脏读问题。
REPEATABLE READ:可重复读,可能发生幻读问题,不会发生脏读和不可重复读问题。
SERIALIZABLE:可串行化,各种问题都不会发生。

事务隔离级别

MySQL 默认隔离级别为 REPEATABLE READ,可手动修改。查看当前会话默认的隔离级别:

SHOW VARIABLES LIKE 'transaction_isolation';

SELECT @@transaction_isolation;

查看事务隔离级别

MVCC 的底层实现原理

MVCC 依赖于记录中的隐式字段、undo 日志和 Read View 来实现。每行记录中除了自定义字段外,还有隐式定义的 DB_TRX_IDDB_ROLL_PTRDB_ROW_ID 等字段。

DB_TRX_ID 是最近修改该记录的事务 ID。
DB_ROLL_PTR 是回滚指针,指向该记录的上一个版本。

不同事务对同一记录的修改会形成版本链。事务进行快照读时会生成一个 Read View,记录并维护系统当前活跃事务的 ID。RC 和 RR 级别下 Read View 生成时机不同,导致两者快照读结果不同。

版本链示例:

创建演示表并插入数据:

CREATE TABLE teacher (number INT,name VARCHAR(100),domain VARCHAR(100),PRIMARY KEY (number)
) Engine=InnoDB CHARSET=utf8;INSERT INTO teacher 

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

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

相关文章

什么是距离选通型水下三维激光扫描仪?(下)

距离选通激光水下成像的发展 距离选通激光成像技术始于上世纪60年代,受制于高性能脉冲激光器和选通成像器件发展的制约,激光距离选通成像技术在随后的二十年发展缓慢,直到20世纪90年代,随着硬件技术的不断成熟,该技术…

Prompt 提示词工程:翻译提示

近期在对计算机学习时,许多内容需要看原始的英文论文,对于我这种学渣来说特别不友好,🤷🏻‍♀️无奈只能一边看翻译,一边学习。 之前有搜到过专门的翻译工具,无奈都是按照字数算费用的&#xf…

【FreeRTOS】删除任务 用遥控器控制音乐

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 学习视频:【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS(FreeRTOS教程 基于STM32,以实际项目为导向)】 【精准空降到 01:22】 https://www.bilibili.com/video/BV1…

模拟原神圣遗物系统-小森设计项目,设计圣遗物词条基类

项目分析 首先需要理解圣遗物的方方面面 比如说圣遗物主词条部分和副词条部分都有那些特点 稍等一会:原神,启动! 在此说明了什么? 这是完全体 :主副 词条都有 如果 升级直接暴击率 那么就留点 或者是另外的元素充能 …

关于笔记本电脑连接电源时触摸板失灵、卡顿、乱飘的问题

目录 前言 问题原因 解决方法 前言 我查阅了相关的资料和方法如下(很感谢这位楼主大佬提供的问题所在): 问题原因 解决方法 那么解决方法无非就是几种(方法仅供参考,不排除一些危险性): 1…

“论面向对象的建模及应用”必过范文,软考高级,系统架构设计师论文

论文真题 软件系统建模是软件开发中的重要环节,通过构建软件系统模型可以帮助系统开发人员理解系统,抽取业务过程和管理系统的复杂性,也可以方便各类人员之间的交流。软件系统建模是在系统需求分析和系统实现之间架起的一座桥梁,系统开发人员按照软件系统模型开发出符合设…

【人工智能】—XGBoost算法在构建互联网防火墙异常行为识别模型应用案例

摘要: 近年来,各地党委、政府加快推进新型工业化,部署实施制造强市战略,提出工业企业“智改数转”是推动全市工业经济稳增长的重要引擎,更是稳增长、促发展的重要抓手。今天博主就以互联网防火墙异常行为识别为例给大家…

PCM、WAV,立体声,单声道,正弦波等音频素材

1)PCM、WAV音频素材,分享给将要学习或者正在学习audio开发的同学。 2)内容属于原创,若转载,请说明出处。 3)提供相关问题有偿答疑和支持。 常用的Audio PCM WAV不同采样率,不同采样深度&#…

信息安全基础知识(完整)

信息安全基础知识 安全策略表达模型是一种对安全需求与安全策略的抽象概念表达,一般分为自主访问控制模型(HRU)和强制访问控制模型(BLP、Biba)IDS基本原理是通过分析网络行为(访问方式、访问量、与历史访问…

linux中Java程序调用C程序中方法的实现方式浅析

在Linux中,Java程序可以通过JNI(Java Native Interface)来调用C程序的方法。 Linux系统环境,Java调用C的主要流程如下: 1、创建Java类文件,如NativeLibrary.java 2、编写Java代码,加载.so共享库…

mysql中的datetime类型在Java中到底对应哪个时间类型?

因为MySQL中用的是datetime类型(年月日 时分秒) java.sql.Date 在Java中用 java.sql.Date 接收 但是得到的却只有年月日 前端接收到的是时间戳 java.time.LocalDateTime 在Java中使用 java.time.LocalDateTime 接收 得到的是带时区的时间 前端接收到的…

ROS中的TF是什么

在ROS (Robot Operating System) 中,tf::TransformBroadcaster 是一个用于发布坐标变换信息的重要类,尤其在处理机器人定位和导航数据时非常常见。tf::TransformBroadcaster 对象允许你广播从一个坐标系到另一个坐标系的变换关系,这对于多传感…

web中间件漏洞-Redis漏洞未授权访问漏洞-写webshell、写ssh公钥

web中间件漏洞-Redis漏洞未授权访问漏洞 利用redis未授权访问漏洞写webshell 利用redis未授权访问、攻击机向服务器写入webshell 从服务器查看写入的webshell 菜刀连接 利用redis未授权访问漏洞写ssh公钥 kali生成rsa公私钥对 ssh-keygen -t rsa 将公钥id_rsa.pub写入文…

33 - 连续出现的数字(高频 SQL 50 题基础版)

33 - 连续出现的数字 -- 开窗函数lead(col,n) 统计窗口内往下第n行值 -- over(partition by xxx) 按照xxx所有行进行分组 -- over(partition by xxx order by aaa) 按照xxx分组,按照aaa排序select distinct num as ConsecutiveNums from(select num,# 从当前记录获…

C语言第17篇:预处理详解

1、预定义符号 C语言设置了一些预定义符号,可以直接使用。预定义符号也是在预处理期间处理的。 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI…

【Streamlit学习笔记】Streamlit-ECharts箱型图添加均值和最值label

Streamlit-ECharts Streamlit-ECharts是一个Streamlit组件,用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts 安装模块库 pip install streamlitpip install streamlit-echarts绘制箱型图展示 在基础箱型…

Apple - Launch Services Programming Guide

本文翻译整理自:Launch Services Programming Guide https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/LaunchServicesConcepts/LSCIntro/LSCIntro.html#//apple_ref/doc/uid/TP30000999-CH201-TP1 文章目录 一、导言谁应该阅读此文档…

【Linux】基础IO_4

文章目录 六、基础I/O4. 动静态库 未完待续 六、基础I/O 4. 动静态库 既然我们能够成功创建静态库了,接下来我们将这个代码打包成动态库: shared: 表示生成共享库格式 fPIC:产生位置无关码(position independent code) 动态库库名规则&…

bug记录——C语言中运算符前假后面不执行

A&&B A为真&#xff0c;才会判断B&#xff0c; 所以如果B访问越界的情况下必有A为假&#xff0c;那么代码是正确的 像这里&#xff0c;当child 1 > n时&#xff0c;a[child 1]越界访问&#xff0c; 但由于&&前面判断了child 1 < n为假&#xff0c;所以…

IDEA快速入门02-快速入门

二、快速入门 2.1 打开IDEA,点击New一个项目 入口&#xff0c;依次打开 File -> New -> Project。 2.2 使用Spring Initializr方式构建Spring Boot项目 2.3 设置项目所属组、项目名称、java版本等 2.4 选择SpringBoot版本及依赖组件 点击Create进行创建。 2.6 创建成…