MySQL高级-MVCC-基本概念(当前读、快照读)

文章目录

  • 1、MVCC基本概念
    • 1.1、当前读
      • 1.1.1、创建表 stu
      • 1.1.2、测试
    • 1.2、快照读

1、MVCC基本概念

全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段undo log日志readView

1.1、当前读

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select…lock in share mode(共享锁),select…for update、update、insert、delete(排他锁)都是一种当前读。

1.1.1、创建表 stu

mysql> DROP TABLE IF EXISTS `stu`;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE TABLE `stu`  (->   `id` int NOT NULL AUTO_INCREMENT,->   `age` int NOT NULL,->   `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, ->   PRIMARY KEY (`id`) USING BTREE,->   INDEX `idx_t_age`(`age`) USING BTREE-> ) ENGINE = InnoDB CHARACTER SET = utf8mb4;
Query OK, 0 rows affected (0.37 sec)mysql> INSERT INTO `stu` VALUES (1, 1, 'tom');
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO `stu` VALUES (3, 3, 'cat');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `stu` VALUES (8, 8, 'rose');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `stu` VALUES (11, 11, 'jetty');
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO `stu` VALUES (19, 19, 'lily');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `stu` VALUES (25, 25, 'luci');
Query OK, 1 row affected (0.00 sec)mysql> 
mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)mysql> 

1.1.2、测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

select * from stu lock in share mode;
  • 在测试中我们可以看到,即使是在默认的RR隔离级别下,事务A中依然可以读取到事务B最新提交的内容,
  • 因为在查询语句后面加上了 lock in share mode 共享锁,此时是当前读操作。
  • 当然,当我们加排他锁的时候,也是当前读操作。

1.2、快照读

简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读

  • Read Committed:每次select,生成一个快照读
  • Repeatable Read:开启事务后第一个select语句才是快照读的地方
  • Serializable:快照读会退化为当前读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

镂空的文字?分享 1 段优质 CSS 代码片段!

大家好,我是大澈! 本文约 800 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段优质 CSS 代码片段,实现 CSS 文字镂空的效果。 老规矩,先阅读代码片段并思考,再看代码解析再思考&#…

Leetcode3190. 使所有元素都可以被 3 整除的最少操作数

Every day a Leetcode 题目来源:3190. 使所有元素都可以被 3 整除的最少操作数 解法1:遍历 遍历数组,累加最少操作数,即 min(num % 3, 3 - num % 3)。 代码: /** lc appleetcode.cn id3190 langcpp** [3190] 使所…

uniapp+vue3开发微信小程序踩坑集

本文主要记录使用uniappvue3开发微信小程序遇见的各种常见问题及注意点。(持续更新) 问题: 自定义组件为什么有些样式加不上去 给自定义组件增加class的时候,有时候不生效有时候生效,一度让我怀疑自己记忆错乱。后来…

全国31省细分产品出口数据集(2002-2022年)

数据简介:整理全国31个省直辖市自治区按hs码分的22类细分产品的出口数据,只包含22类的细分,不包含更细的类目。可用来计算出口产品质量,出口产品技术复杂度等指标,数据区间为2002-2022年。 数据名称:31省细…

《昇思25天学习打卡营第11天 | 昇思MindSpore基于 MindSpore 实现 BERT 对话情绪识别》

11天本节学习到BERT全称是来自变换器的双向编码器表征量,它是Google于2018年末开发并发布的一种新型语言模型。BERT模型的主要创新点都在pre-train方法上,即用了Masked Language Model和Next Sentence Prediction两种方法分别捕捉词语和句子级别的repres…

【SGX系列教程】(五)Intel-SGX 官方示例分析(SampleCode)——RemoteAttestation

文章目录 一.RemoteAttestation原理介绍1.1 远程认证原理1.2 远程认证步骤1.3 远程认证基本流程1.4 IAS通过以下步骤验证报告的签名1.5 关键术语1.6 总结二.源码分析2.1 README2.1.1 README给出的编译流程2.2 重点代码分析2.2.0 主要代码模块交互流程分析2.2.1 isv_app文件夹2.…

python-18-零基础自学python-用类创建冰淇凌小店的口味

学习内容:《python编程:从入门到实践》第二版 知识点: 类、子类、继承、调用函数 练习内容: 练习9-6:冰激凌小店 冰激凌小店是一种特殊的餐馆。编写一个名为IceCreamStand的类,让它继承为完成练习9-1或…

YonBIP 获取项目代码配置(图文)

项目开发文件在本地环境重新部署后,开发端机器需要重新部署,在此记录一下操作过程。 1. 新建项目目录,在目录下点鼠标右键,选 Git Bash Here 2. 开始下载代码,根据代码量多少,几分钟就能下载完成。 3. 下载…

任意密码重置漏洞

文章目录 1. 任意密码重置漏洞原理2. 任意密码重置漏洞产生原因3. 任意密码重置漏洞场景3.1 验证码爆破3.2 验证凭证回传3.3 验证凭证未绑是用户3.4 跳过验证步骤3.5 凭证可预测3.6 同时向多个账户发送凭证 4. 任意密码重置经典案例4.1 中国人寿某重要系统任意账户密码重置4.2 …

【单元测试】Controller、Service、Repository 层的单元测试

Controller、Service、Repository 层的单元测试 1.Controller 层的单元测试1.1 创建一个用于测试的控制器1.2 编写测试 2.Service 层的单元测试2.1 创建一个实体类2.2 创建服务类2.3 编写测试 3.Repository 1.Controller 层的单元测试 下面通过实例演示如何在控制器中使用 Moc…

API-节点操作

学习目标: 掌握节点操作 学习内容: DOM节点查找节点增加节点删除节点 DOM节点: DOM树里每一个内容都称之为节点。 节点类型 元素节点所有的标签比如body、div;html是根节点属性节点所有的属性,比如href文本节点所有…

FastAPI-Cookie

fastapi-learning-notes/codes/ch01/main.py at master Relph1119/fastapi-learning-notes GitHub 1、Cookie的作用 Cookie可以充当用户认证的令牌,使得用户在首次登录后无需每次手动输入用户名和密码,即可访问受限资源,直到Cookie过期或…

《PyTorch计算机视觉实战》:一、二章

目录 第一章:人工神经网络基础 比较人工智能和传统机器学习 人工神经网络(Artificial Neural Network,ANN) 是一种受人类大脑运作方式启发而构建的监督学习算法。神经网络与人类大脑中神经元连接和激活的方式比较类似&#xff0…

GoLang语言

基础 安装Go扩展 go build 在项目目录下执行go build go run 像执行脚本文件一样执行Go代码 go install go install分为两步: 1、 先编译得到一个可执行文件 2、将可执行文件拷贝到GOPATH/bin Go 命令 go build :编译Go程序 go build -o "xx.exe"…

4.x86游戏实战-人物状态标志位

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:3.x86游戏实战-寄存器 人物状态标志位: 什么叫人物状态标志位&…

Leetcode[反转链表]

LCR 024. 反转链表 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示…

Go使用Gin框架开发的Web程序部署在Linux时,无法绑定监听Ipv4端口

最近有写一部分go语言开发的程序,在部署程序时发现,程序在启动后并没有绑定ipv4的端口,而是直接监听绑定ipv6的端口。 当我用netstat -antup | grep 3601查找我的gin服务启动的端口占用情况的时候发现,我的服务直接绑定了tcp6 &a…

240629_昇思学习打卡-Day11-Vision Transformer中的self-Attention

240629_昇思学习打卡-Day11-Transformer中的self-Attention 根据昇思课程顺序来看呢,今儿应该看Vision Transformer图像分类这里了,但是大概看了一下官方api,发现我还是太笨了,看不太明白。正巧昨天学SSD的时候不是参考了太阳花的…

Linux - 札记 - W10: Warning: Changing a readonly file

Linux - 札记 - W10: Warning: Changing a readonly file 这里写目录标题 一、问题描述1. 现象2. 原因 二、解决方案 一、问题描述 1. 现象 在使用 vim 编辑文件时(我这里是要编辑 /root/.ssh/authorized_keys)提示:W10: Warning: Changing…

IOS Swift 从入门到精通:ios 连接数据库 安装 Firebase 和 Firestore

创建 Firebase 项目 导航到Firebase 控制台并创建一个新项目。为项目指定任意名称。 在这里插入图片描述 下一步,启用 Google Analytics,因为我们稍后会用到它来发送推送通知。 在这里插入图片描述 在下一个屏幕上,选择您的 Google Analytics 帐户(如果已创建)。如果没…