当前位置: 首页 > news >正文

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.lryc.cn/news/386887.html

相关文章:

  • kubernetes给指定用户分配调用k8s的api权限
  • 无人机的弱点和限制
  • ElementUI的基本搭建
  • Modbus TCP与TCP/IP协议间的差异与应用场景
  • Linux Doxygen快速生成文档
  • MobPush REST API的推送 API之批量推送
  • Arthas快速入门
  • python系列30:各种爬虫技术总结
  • PHP和phpSpider:如何应对反爬虫机制的封锁?
  • 学生宿舍管理系统
  • 一分钟彻底掌握Java迭代器Iterator
  • 第三十七篇——麦克斯韦的妖:为什么要保持系统的开放性?
  • 青岛网站建设一般多少钱
  • Linux 进程状态:TASK_INTERRUPTIBLE 和 TASK_UNINTERRUPTIBLE
  • vue3使用vant4的列表vant-list点击进入详情自动滚动到对应位置,踩坑日记(一天半的踩坑经历)
  • Linux的fwrite函数
  • python udsoncan 详解
  • 基于自组织长短期记忆神经网络的时间序列预测(MATLAB)
  • 240629_昇思学习打卡-Day11-Vision Transformer中的self-Attention
  • 代码随想录-Day43
  • C++——探索智能指针的设计原理
  • 办公效率新高度:利用办公软件实现文件夹编号批量复制与移动,轻松管理文件
  • Windows kubectl终端日志聚合(wsl+ubuntu+cmder+kubetail)
  • 【MySQL】数据库——事务
  • python代码缩进规范(2空格或4空格)
  • 前后端分离的后台管理系统开发模板(带你从零开发一套自己的若依框架)上
  • 【C++ | 委托构造函数】委托构造函数 详解 及 例子源码
  • iCloud邮件全攻略:设置与使用终极指南
  • 【计算机毕业设计】基于微信小程序的电子购物系统的设计与实现【源码+lw+部署文档】
  • CSS实现动画