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

news/2024/7/8 6:37:11 标签: mysql, 数据库, MVCC, 当前读, 快照读

文章目录

MVCC_1">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(不加锁)就是快照读快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读


http://www.niftyadmin.cn/n/5536676.html

相关文章

安装基于Ubuntu的Zorin OS

目录 前言Zorin OS 介绍准备工具硬件(自己准备)软件(我会在文末提供链接) 安装1. 磁盘分区2. 关闭Secure Boot(可选)3. 关闭RST4. 下载&写U盘5. U盘加载系统6. 正式安装7. 重启 总结下载链接花絮 本文由…

Eclipse 菜单:深入解析与高效使用技巧

Eclipse 菜单:深入解析与高效使用技巧 Eclipse 是一款广泛使用的集成开发环境(IDE),它为Java、C++、PHP等编程语言提供了一个强大的开发平台。Eclipse 的菜单是其用户界面的一部分,提供了丰富的功能和选项,以帮助开发者更高效地工作。本文将深入解析 Eclipse 的菜单系统…

关于Mac mini 10G网口的问题

问题: 购入一个10G网口的Mac mini M2,将其和自己的2.5G交换机连接,使用共享屏幕进行远程操作的过程中出现了频率极高的卡顿,几乎是几秒钟卡一下,使用ping进行测试发现卡的时候就ping不通了。测试使用Mac mini的无线网和雷电转2.5G…

【CUDA】 矩阵乘向量 matVecMul

Matrix - Vector Multiplication 矩阵-向量乘法是线性代数中的基本操作。它用于将一个矩阵与一个向量相乘。乘法的结果是与输入向量大小相同的向量。 矩阵和向量的乘法如图1所示。 图1 基础kernel与共享内存kernel 执行矩阵-向量乘法的基础kernel是使用单个线程执行输出向量…

网站UI:我只负责漂亮,实现的事情交给前端开发。

网页UI的美观性对于用户体验和网站的成功至关重要,以下是几个原因: 吸引用户:美观的网页UI可以吸引用户的注意力,使用户对网站产生兴趣并留下深刻印象。用户更有可能在美观的界面上停留更长时间,探索网站的功能和内容…

宝塔面板Nginx的https301跳转http

宝塔面板Nginx的https301跳转http: 登录宝塔面板:进入你的宝塔面板管理界面。 选择网站管理:在左侧菜单中,点击“网站”,然后选择你需要进行重定向的网站。 配置网站设置:在所选网站的管理界面中&#x…

linux下删除当前路径下的所有文件夹但保留文件

打开终端,输入, find . -mindepth 1 -maxdepth 1 -type d -exec rm -r {} 解释: find是查找文件和文件夹的命令。.表示当前路径。-mindepth 1表示最小搜索深度为1,这样不会包括当前目录。-maxdepth 1表示最大搜索深度为1&#x…

VScode在linux下调试代码备忘

0、资料来源 https://www.bilibili.com/video/BV13K411M78v? p2&spm_id_frompageDriver 该视频讲解了vscode在window下配置单个源文件/多个源文件/CMakeLists.txt工程,如何进行调试 在此基础上测试了linux下vscode的调试,并通过测试,…