mysql常见面试题--03 事务常考题以及事务的隔离

article/2023/6/4 15:38:36
  1. 什么是事务?
    对数据库的一系列操作,要么全执行,要么不执行.
    事务时逻辑上的一组操作,要么全部执行,要么都不执行。

  2. 事务的三大特征

    1. 原子性 A 事务是最小执行单位,要么全部执行,要么都不执行
    2. 一致性 C 事务执行前后,事务保持一致。例如转账,二者总金额不变。
    3. 隔离性 I 各并发事务之间操作数据库是独立的
    4. 持久性 D 愿意各吃 事务提交,即使断电,也应保证状态被写入数据库
  3. 事务的四大特征如何保证
    原子性 undo日志 (回滚)
    持久性性 redo日志
    隔离性 MVCC
    一致性通过原子性 持久性 隔离性保证,我的理解是上面三个没有问题,持久性自然能够保证
    在这里插入图片描述

  4. 事务并发带来的问题

    1. 脏读 一个事务读取了另一个未提交事务修改过的数据
      W1(x) R2(x) T2提交
    2. 不可重复读
      一个事务修改了另一个未提交数据读取的数据 强调内容修改或记录数减少
      R1(x) W2(x) 再次读取,数据不一样了
    3. 幻读
      一个事务根据某些查询条件查询出一些记录,事务未提交时,另一个事务写入一些符合条件的数据----->再次查询,两次结果不一致----》幻读==强调后来读取到了之前不存在的数据,可以是insert,也可以是update(符合标准)
      ==
  5. 脏写
    一个事务修改了另一个未提交事务修改的数据
    W1【X】 W2【2】

  6. Mysql的四种隔离级别

    1. 读未提交
    2. 读已提交 --脏读
    3. 可重复性读 --不可重复性读
    4. 串行 – 脏读 ,不可重复读,幻读
  7. 什么是MVCC
    多版本并发控制的缩写(Multi-Version-Concurency Control)

  8. mysql中是如何解决幻读的?或者说为什么解决不可重复度可以最大程度的避免脏读?

  9. 使用数据快照解决幻读 不可重复读问题 (多版本并发控制原理)
    隐藏列中有 事务id 回滚指针
    在这里插入图片描述
    所有的事务分为三类

  10. tx_id<m_ids 说明该事务已经提交,可见.

  11. tx_id>=max_trx_id,说明这个事务在creator_trx_id创建后才创建,所以是不可见的

  12. 当 min_tx_id<=cur<max_tx_id时,事务可能已经提交,也可能为提交
    在这里插入图片描述

如果已经提交,该版本是可见的,如果未提交,该版本不可见
10. 可重复性读是如何工作的
在select之前,创建一个readview(快照),当执行过程中,查到一条数据,查看该数据的版本,如果是可见,直接读出,如果是不可见的,通过回滚指针查找版本链,直到找到 trx_id 「小于」 Read View 中的 min_trx_id 值的第一条记录
在这里插入图片描述
11. 读已提交是如何工作的
每次执行语句前会创建一个快照,当B事务读取一条数据后,A对该数据进行了修改,B再次读取数据,会创建一个新的快照,由于B未提交,所以仍然会在当前活跃事务列表中,B再次读取会查找版本链.当A提交数据,B再次执行查询创建快照的时候会被归入 (-inf,max_tr_id)的已提交,会被判为可见.
12. MVCC是如何(部分的)解决幻读的
(1)如果是快照读,MVCC的可重复读可以(极大部分的)解决幻读
(2)如果是当前读,在这里插入图片描述
在这里插入图片描述
MVCC通过建立快照,当隔离级别是可重复读时,第一次查询创建的快照在之后会一直使用,即使后续插入了新的数据,但是版本过高,会沿着版本链向前找,最后找到空.

  1. 什么情况下MVCC不能解决幻读
    A 查询 id=5 (为空)
    B 插入id=5
    B T提交
    A 更新id等于5的值 (更新是当前读操作)
    A查询id=5 (由于更新,该记录事务id为自己,所以可以读到)

情况2:
在这里插入图片描述


https://www.dgrt.cn/a/392024.html

相关文章

【推荐研究方向(1)】小样本开集目标检测(few-shot open-set detection)

论文题目:Towards Few-Shot Open-Set Object Detection 论文链接:https://arxiv.org/abs/2210.15996 1、任务:小样本开集目标检测,使用少量已知类样本训练模型,使得模型既能够检测小样本已知类又能够检测未知类。 2、动机:解决FSOSOD问题有三个重要原因。 1)可…

道路病害识别监测系统 CNN网络

道路病害识别监测系统通过CNN网络深度学习算法&#xff0c;道路病害识别监测对巡检车上实时监控道路影像数据进行分析&#xff0c;输出道路病害裂缝巡检报告并落图展示。在CNN出现之前&#xff0c;对于图像的处理一直都是一个很大的问题&#xff0c;一方面因为图像处理的数据量…

one-shot learning、Siamese网络、Triplet loss、面部验证和二分类

目录1.one-shot learning(一次学习)one-shot learning就是对某一类别只提供一个或者少量的训练样本。而很小的训练集不足以训练一个稳健的神经网络。为了解决这个问题&#xff0c;需要首先训练一个 similarity function&#xff1a;d(img1,img2)&#xff0c;用于表示两张图片的…

DVWA-XSS(Reflected)注入-Low-Medium-Hight

Low 1、看到这里&#xff0c;这个输入框就是“入口”&#xff0c;输入探测123“出口”的位置 2、直接上payload: <script>alert(1)</script> 3、结果&#xff1a; 4、这里我们可以去查看一下源码的结构&#xff0c;已经成功插入了一个<script>标签 Mediu…

叶尖速比与风力利用系数之间的关系曲线(代码)

风力发电机功率与物理参数之间的关系为&#xff1a;Cp为风能利用系数&#xff0c;是桨距角 与叶尖速比 的函数&#xff0c;具体的关系可表示为&#xff1a;根据上述公式&#xff0c;叶尖速比与风力利用系数之间的规律如图所示。可见&#xff0c;每一个确定的桨距角&#xff0c…

每天10个前端小知识 【Day 5】

前端面试基础知识题 1. typeof 与 instanceof 有什么区别 typeof与instanceof都是判断数据类型的方法&#xff0c;区别如下&#xff1a; typeof会返回一个变量的基本类型&#xff0c;instanceof返回的是一个布尔值。instanceof 可以准确地判断复杂引用数据类型&#xff0c;但…

借壳上市 - 打造企业上市系列文章

借壳上市是一个金融术语&#xff0c;指一家母公司(集团公司)通过把资产注入一家市值较低的已上市公司(壳&#xff0c;Shell)&#xff0c;得到该公司一定程度的控股权&#xff0c;利用其上市公司地位&#xff0c;使母公司的资产得以上市。通常该壳公司会被改名。借壳上市借壳上市…

Java多线程相关问题

多线程多线程概念&#xff1f;多线程是指程序中包含多个执行单位&#xff0c;即在一个程序中可以同时运行多个不同的线程来执行不同的任务&#xff0c;也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。多线程的优缺点&#xff1f;竞用共享资源一直是让人头疼的问…