博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事务的隔离性(续篇)
阅读量:4607 次
发布时间:2019-06-09

本文共 692 字,大约阅读时间需要 2 分钟。

事务的隔离性(续篇)

首先说一个结论:

​ 事务A,B交替执行,两事务会更新同样的一行,隔离级别采用可重复读,那么会发生什么?

  • A先更新完,但并未提交,则B更新时会被阻塞(行锁)
  • A先更新完且提交了,则B在更新时,能读到最新的数据,并且将之更新

需要注意的是第二个,并没有触发可重复读,而是“当前读”

说一下由MVCC实现的两种隔离级别:

MVCC建立版本视图:

其中V4为最新数据,U3指的是undo log里的数据,可以根据U3计算出V3,同理计算出各个版本的数据。

假设每个事务都有自己的抽象视图(好比“快照”)

一、读已提交

它每执行一条语句就会更新一次视图,在此之前提交的数据都在视图里,因此他能及时读到已提交数据。(具体实现其实就是up_limit_id不断更新等)

二、可重复读
  • 只在事务启动时开启一个视图,因此只会读到在事务开始之前提交的数据

    视图的具体实现

    在事务启动数据,建立一个数组包含当前“活跃”事务,取数组里最小事务id为低水位,取当前系统里面已经创建过的事务 ID 的最大值加 1 记为高水位(up_limit_id)。

    这个视图数组和高水位,就组成了当前事务的一致性视图(read-view)。

    其中处于高低水位之间,但是不在数组里的id,也算作已提交事务

  • 特殊情况:“当前读”

    写数据我们肯定要对已提交的最新数据进行改写,所以在执行update操作时,我们要先读后写,其中的读就不能采用可重复读,而是“当前读”,读到最新的数据并进行改写。

转载于:https://www.cnblogs.com/lnu161403214/p/11090681.html

你可能感兴趣的文章
回溯法算法框架
查看>>
残差学习【转载】
查看>>
0302 关于IT行业的就业感想
查看>>
3、流程语句相关练习
查看>>
30、git 使用
查看>>
转发:China2008 标题:SharePoint 文档库打开HTML 直接浏览而不是打开下载对话框...
查看>>
iOS网络-02-数据解析(JSON与XML)
查看>>
python列表求和的几种等效电路
查看>>
Luogu P3393 逃离僵尸岛
查看>>
Flatten Binary Tree to Linked List
查看>>
Edit Distance
查看>>
软件工程第一次作业补充
查看>>
N76E003---输入捕获
查看>>
poj 1094 Sorting It All Out(拓扑排序)
查看>>
acdream B - 郭式树 (水题 卡cin,cout, 卡LL)
查看>>
BMP图像格式
查看>>
python的匿名函数lambda解释及用法
查看>>
c#遍历Dictionary使用KeyValuePair
查看>>
defineProperties属性的运用==数据绑定
查看>>
关于 IOS 发布的点点滴滴记录(一)
查看>>