我们来学mysql -- 事务并发之不可重复读(原理篇)
事务并发之不可重复读
- 题记
- 不可重复读
- 系列文章
题记
- 在《事务之概念》提到事务对应现实世界的状态转换,这个过程要满足4个特性
- 这世界,真理只在大炮射程之类,通往和平的道路,非“常人”可以驾驭
- 一个人生活按部就班,人多起来,难免鸡飞狗跳
- 同理现实世界的状态转换映射到数据库,满足4个特性也非一帆风顺
- 在数据库江湖,一个事务任我行,两个事务南北双雄,多事务江湖大乱
- 接下来便是并发事务,不可重复读的问题
不可重复读
-
一个例子
- 在2225年的一天,一条时空裂缝被人为打开,一个身影窜入其中消失不见
- 时间来到2025年6月7号,地点是一所学校的考场中
- 正在进行一场没有硝烟的战争
- 消失的身影赫然出现在室外走廊某处隔间,将一副高科技装备摄入某间教室某人视网膜
- 此时你如同开了天眼一般,全校成绩最优学生试卷跃然眼前,起初你大吃一惊
- 然后,你奋笔疾书…
- 一抄到底后,你保持了良好的习惯-再检查一遍( 不交卷 ),不查不知道,发现存在出入很大的答案
- …
- 当然,这点小插曲不影响你取的了全班第一名,全校第二名,全市前5名,全省前10名的成绩,踏入北大榜上清华
-
醒一醒
- 哦, 原来是夏季的一个午后,窗外阵阵蝉鸣,你缓慢睁开眼睛,望着熟悉又陌生的教室…
- 这又是个好例子
- 咱们关注下那个小插曲 - 你抄了错误的“答案”
- 那是一道开始没有被检查出来,但是写了一些,做题人选择先易再难跳过此题
- 但是抄题人的你,奋笔疾书…
- 这就是你抄了别人未确定的答案,所以才前后不一样
- 哦, 原来是夏季的一个午后,窗外阵阵蝉鸣,你缓慢睁开眼睛,望着熟悉又陌生的教室…
-
如果一个事务修改了另一个未提交事务读取的数据,便是不可重复读
- 同样我们用人话来进行翻译
- 这里让我们来进行模拟
- 数据库中是参考的答案
- 读写到试卷中是内存的记录
- 交卷对应着提交
- 奋笔疾书完的你,没有交卷(未提交)
- 有题目,被修正了答案(其他事务修改)
- 仔细检查的你查到答案变化(不可重复读)
- 是不是完美的阐述了这个概念…
- 等一等,此时,有人提出疑问:你未提交啥,你不只是读取吗?你读还不给人家修改?
- 问的好,真不愧是咱们博文的读者,眼光独到,独立思考
- 再看下定义 未提交事务读取的数据
- 它描述的不只是一个读取操作(sql)
- 是在这个事务的一系列操作中,存在一个读取操作
- 是这一系列操作的事务还未提交
-
故事的最后
- 2225年的某一天,你孙子的孙子,依然穷困潦倒,别人已事业有成,但他孑然一身
- 原来那个夏天不是一场梦,逆天改命的背后,是你儿子的儿子的儿子,不是亲儿子
系列文章
我们来学mysql – 有无事务ID(原理版)
我们来学mysql – 建立索引(原理版)
我们来学mysql – 使用索引(原理版)
我们来学mysql – 索引失效(原理版)
我们来学mysql – 用不上的索引(原理版)
我们来学mysql – 索引上的锁(原理版)
我们来学mysql – 访问方法(原理篇)
我们来学mysql – 连接(原理版)
我们来学mysql – 查询成本之索引选择(原理篇)
我们来学mysql – EXPLAIN之ID(原理篇)
我们来学mysql – 事务之概念(原理篇)
我们来学mysql – 事务并发之脏写(原理篇)
我们来学mysql – 事务并发之脏读(原理篇)
我们来学mysql – 事务并发之幻读(原理篇)