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,一经查实,立即删除!

相关文章

在 RK3568 上构建 Android 11 模块:深入解析 m、mm、mmm 编译命令

目录 Android 编译系统概述编译命令简介 环境准备使用 m、mm、mmm 编译模块编译整个源码树编译单个模块编译指定目录下的模块 高级应用并行编译清理编译结果编译特定配置 在 Android 开发中,特别是在 RK3568 这样的高性能平台上,有效地编译和管理模块是确…

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

距离选通激光水下成像的发展 距离选通激光成像技术始于上世纪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不同采样率,不同采样深度&#…

LeetCode 187-重复的DNA序列

187. 重复的DNA序列 DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。 例如,“ACGAATTCCG” 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有…

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

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

React框架的来龙去脉,react的技术原理及技术难点和要点,小白的进阶之路

React 框架的来龙去脉:技术原理及技术难点和要点 1. React 的起源与发展 React 是由 Facebook 开发的一个用于构建用户界面的 JavaScript 库。它最初由 Jordan Walke 创建,并在 2013 年开源。React 的出现是为了解决在大型应用中管理复杂用户界面的问题…

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 接收 得到的是带时区的时间 前端接收到的…

系统或子系统需要划分为多个配置项的原因

按照国军标438C标准以及美军的MIL-STD 498标准,将一个子系统划分为多个配置项(CSCI)有助于提高系统的管理、开发、测试和维护的效率和质量。 以下是将一个子系统划分为多个配置项的主要原因: 1. 提高可管理性 简化管理&#xff…

Redis——5、持久化RDB和AOF

一、Redis持久化的两种方法: RDB(Redis DataBase Backup file)Redis数据备份文件 与AOF(Append Only File)追加文件 二、RDB 1、介绍 RDB 简单来说就是将物理内存中的数据快照写入磁盘中,当Redis实例宕机时&…

chromedriver114以后版本下载地址汇总chromedriver所有版本下载地址汇总国内源下载

谷歌浏览器版本经常会升级,chromedriver 也得下载匹配的版本 chromedriver 114以前版本下载地址https://registry.npmmirror.com/binary.html?pathchromedriver/ 但是自从115版本及其以后网站就找不到了,因此整理了截止2024年6月16日前所有在windows x6…

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写入文…