当前位置: 首页> 健康> 母婴 > MySQL高级-MVCC-基本概念(当前读、快照读)

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

时间:2025/7/11 7:33:42来源:https://blog.csdn.net/m0_65152767/article/details/140070933 浏览次数:0次

文章目录

  • 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:快照读会退化为当前读
关键字:MySQL高级-MVCC-基本概念(当前读、快照读)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: