MySQL 事务 MVCC 版本链
小贴士: 能不能在两个事务中交叉更新同一条记录呢?哈哈,这是不可以滴,第一个事务更新了某条记录后,就会给这条记录加锁,另一个事务再次更新时就需要等待第一个事务提交了,把锁释放之后才可以继续更新。本篇文章不是讨论锁的,有关锁的更多细节我们之后再说。
4)如果某个版本的数据对当前事务不可见的话,那就顺着版本链找到下一个版本的数据,继续按照上边的步骤判断可见性,依此类推,直到版本链中的最后一个版本,如果最后一个版本也不可见的话,那么就意味着该条记录对该事务不可见,查询结果就不包含该记录。
小贴士: 事务执行过程中,只有在第一次真正修改记录时(比如使用INSERT、DELETE、UPDATE语句),才会被分配一个单独的事务id,这个事务id是递增的。
之后,我们把事务id为100的事务提交一下,就像这样:
此刻,表t中id为1的记录的版本链就长这样:
以此类推,如果之后事务id为200的记录也提交了,再此在使用READ COMMITTED隔离级别的事务中查询表t中id值为1的记录时,得到的结果就是'诸葛亮'了,具体流程我们就不分析了。总结一下就是:使用READ COMMITTED隔离级别的事务在每次查询开始时都会生成一个独立的ReadView。
也就是说两次SELECT查询得到的结果是重复的,记录的列c值都是'刘备',这就是可重复读的含义。如果我们之后再把事务id为200的记录提交了,之后再到刚才使用REPEATABLE READ隔离级别的事务中继续查找这个id为1的记录,得到的结果还是'刘备',具体执行过程大家可以自己分析一下。
---------------------
作者:wust_zwl
来源:CSDN
原文:https://blog.csdn.net/qq_38538733/article/details/88902979
版权声明:本文为博主原创文章,转载请附上博文链接!
转载于:https://www.cnblogs.com/xibuhaohao/p/11065532.html
MySQL 事务 MVCC 版本链相关推荐
- 京东面试官问我:“聊聊MySql事务,MVCC?”
大家好,今天来分享一个京东面试真题,也是这是我前阵子听我工位旁边高T(高,实在是高)面试候选人的时候问的一个问题,他问,你能说说 mysql的事务吗?MVCC有了解吗? 话不多说,直接开干 事务定义及 ...
- Mysql事务-MVCC
多版本并发控制(MVCC) 1 MVCC 同一条记录在系统中存在多个版本,这就是数据库的多版本并发控制(MVCC,Multiversion Concurrency Control),MVCC 的实现依 ...
- 阿里二面:了解 MySQL 事务底层原理吗
你好,我是坤哥,今天是国庆最后一天,不知大家是否玩得尽兴,我基本在家带娃了,累得半死,顺带肝了一篇文,来自读者曾经在阿里的面试题,希望对大家有帮助,另外也欢迎大家加我微信「geekoftaste」,一 ...
- 链mysql_mysql 版本链机制 readView
版本链机制 , readView img innodb表下存在两个隐藏列: trx_id : 存放事务id roll_pointer : 存放一个指向上一事务版本的指针 版本链的作用: 用一个单链表的 ...
- Mysql事务隔离级别及MVCC(多版本并发控制)
一.MySQL事务隔离级别 先注明一点:以下讨论都是在多事务并发的情境下讨论的 事务的特性(InnoDB引擎才有事务): ACID 原子性:一个事务不可再分割,要么都执行要么都不执行 一致性:一个事务 ...
- MySQL高级理论-MVCC提交查询相关(版本链)
首先要介绍几个概念: 1. MVCC(Multi-Version Concurren):多版本并发控制,是MySQL的事务型存储引擎如InnoDB. 2. trx_id与roll_poin ...
- Mysql的MVCC知多少(隐藏字段,undolog版本链和ReadView)
文章目录 前言 一.什么是MVCC 二.快照读与当前读 三.4种隔离级别与MVCC 四.MVCC实现 4.1 隐藏字段和undolog版本链 4.2 ReadView 五.说明 前言 其实自己之前对M ...
- mysql实现可重复读(解决幻读)的原理(MVCC机制的版本链和读视图)
版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL唯一键时都不会包含row_id列): ...
- MYSQL专题-MVCC多版本并发控制
MVCC,全称Multi-Version Concurrency Control,即多版本并发控制.MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内 ...
- 腾讯面试:MySQL事务与MVCC如何实现的隔离级别?
有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...
最新文章
- 第二批重磅嘉宾已就位,邀你共探AI行业新机遇 | MEET2022智能未来大会
- 学python需要什么-想要学人工智能需要学些什么python的知识
- 安卓客户端与服务器交互Json数据
- [Leedcode][JAVA][第1014题][最佳观光组合][数组][暴力优化]
- 数据结构 - 多路搜索树(2-3树、b树、b+树、b*树)
- 本地储存数据_你的爬虫数据储存在哪?MongoDB入门篇
- Java基础学习总结(59)——30 个java编程技巧
- 怎么做数据可视化大屏?从设计到上线,一般用这3类工具
- java 开源im_开源IM项目-InChat登录接口设计与实现(基于Netty)
- Struts2基础教程
- FIDO android客户端认证
- swap file .swp already exists
- win10linux双系统引导设置,win10 + Ubuntu20.04 LTS双系统引导界面美化
- 电商网络推广是干什么,电商网络营销做什么
- 孙鑫老师VC笔记(转)
- Apache Storm 官方文档 —— Trident API 概述
- matlab atem(),非特定人的英文
- 谷歌pay服务端文档_米大师服务端说明
- OPENGL学习(四)GLUT三维图像绘制
- 为什么终结符只有综合属性?
热门文章
- 案例分享:Windows Phone上的移动浏览体验
- 社区智慧+机器智能=奇虎经验的知识机器人
- 微信小程序文本溢出的处理方法
- android 懒加载用法,Android ViewPager Fragment使用懒加载提升性能详解
- 天气预测频繁2项集_寻攻略 | 天气不似预期?我从来没在怕的
- 4.Entity Framework Core 5.0 添加数据
- golang gin解决跨域:编写一个全局中间件
- Kibana 自定义索引模式 Index patterns
- PHP数组常用方法(优化版)
- Bootstrap图片中加播放按钮