首页 > 数据库 >MySQL 面试突击指南:核心知识点解析2

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

时间:2024-06-23 09:58:49浏览次数:26  
标签:知识点 事务 读取 记录 幻读 面试 Read 脏读 MySQL

事务并发可能引发的问题

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 

标签:知识点,事务,读取,记录,幻读,面试,Read,脏读,MySQL
From: https://blog.csdn.net/qq_26893655/article/details/139881927

相关文章

  • 学生读书笔记共享系统-毕业设计-Springboot+mysql+Vue
    介绍学生读书笔记共享系统是一款专为学生设计的平台,旨在通过信息化手段实现读书笔记的共享和交流。系统分为管理端和用户端两个角色,分别为管理员和学生用户提供不同的功能模块,满足各自的需求。该系统不仅促进了学生之间的学习交流,还提升了学习效率和笔记管理的便捷性。技术栈......
  • Springboot计算机毕业设计自动答疑系统小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的快速发展,学生对于知识获取和问题解决的需求日益增加。然而,传统的答疑方式,如面对面咨询或邮件回复,存在效率低下、资源分配不均等问题......
  • Java高手的30k之路|面试宝典|精通JVM(二)
    JVM基本结构类加载子系统:负责将.class文件加载到内存中,并进行验证、准备、解析和初始化。运行时数据区:包括堆(Heap)、方法区(MethodArea)、Java栈(JavaStack)、本地方法栈(NativeMethodStack)和程序计数器(ProgramCounterRegister)。执行引擎:包括解释器(Interpreter)、即时编译器......
  • Java高手的30k之路|面试宝典|精通网络编程
    基础概念OSI和TCP/IP在高级Java开发面试中,关于OSI模型和TCP/IP模型的理解是非常重要的。以下是这两个网络模型及其各层功能的详细解释:OSI模型OSI(OpenSystemsInterconnection)模型是一个概念性框架,用于理解和设计网络通信的不同层次。它分为七层,每层都有特定的功能。......
  • java面试题--基础上
    一、说说&和&&的区别?作为运算符:&将二进制的每一位进行与运算作为逻辑运算符:两者都是与,&&如果左边为假则终止右边运算,即短路运算。&则需要把两边的比较执行完。二、int和Integer的区别int是Java的基本数据类型,而Integer是int的包装类int直接存储整数值,而Integer是一个对象,包含......
  • 华为大数据部分面试题及答案分享
    (1)namenode内存满了,如何进行扩容,调什么参数。1.增加NameNode的内存在hadoop-env.sh文件中,可以增加JVM分配给NameNode的内存。通常是在HADOOP_NAMENODE_OPTS中增加-Xmx参数来增加最大堆内存。exportHADOOP_NAMENODE_OPTS="-Xmx8g-Xms4g${HADOOP_NAMENODE_OPT......
  • 简单整理一下近几年辅导的毕业设计项目Java+SSM+MySQL
    序号项目标题语言框架数据库代码论文PPT1jspm基于SSM的“昭愿”甜品店销售管理系统JavaSSMMySQL√√√2jspm基于SSM的医药管理系统JavaSSMMySQL√√√3jspm1x3v1基于JSP的校园宿舍电费缴纳系统JavaSSMMySQL√√√4jspm“众优”大学生家教平台的设计与实现JavaSSMMySQL√√√5......
  • 常见面试题:fiddler如何定位前后端问题?
    fiddler如何定位前后端问题?增强模式完成全网搜索,参考20个信源并总结 回答 Fiddler定位前后端问题概述Fiddler是一款常用的网络调试代理工具,它可以捕获和分析HTTP和HTTPS请求和响应数据,帮助开发者和测试人员定位前后端问题。通过Fiddler,我们可以查看请求......
  • 面试题-Java垃圾回收之垃圾收集器
    1.基础知识(1)知识点补充Stop-the-World:发生时,除了GC所用的线程之外,所有的线程都处于等待状态Safepoint:可达性分析算法时,必须保证在某个快照点进行。分析的过程中对象的引用关系不会发生变化!JVM的运行模式:Java-version就能看到Server模式:启动慢,但是进入稳定期......
  • 面试官:请你实现三栏布局并且优先加载中间内容 我:稳啦- ̗̀(๑ᵔ⌔ᵔ๑)
    前言三栏布局是网页设计中一种经典布局方式,它将页面分为三个垂直部分:左栏、中栏和右栏,三栏在同一行显示。这种布局模式在很多网站的首页或内容密集型页面中非常常见,因为它能够有效地组织信息,提供良好的用户体验。常常也是作为面试常考题出现,今天将为大家介绍常见的三栏布......