首页 > 数据库 >MySQL MVCC之Read View 的运行原理演示

MySQL MVCC之Read View 的运行原理演示

时间:2024-11-26 11:32:16浏览次数:7  
标签:事务 Read MySQL 会话 提交 MVCC ID View

背景

在 MySQL 的 InnoDB 存储引擎中,REPEATABLE READ 是默认的事务隔离级别。在这个隔离级别下,每个事务在开始时会创建一个 Read View,这个 Read View 记录了事务开始时所有活跃事务的 ID。事务在执行过程中会一直使用这个 Read View,即使其他事务提交了更改。

示例

假设我们有两个会话,都关闭了自动提交,并且使用默认的 REPEATABLE READ 隔离级别。

初始化数据
CREATE TABLE t_user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

INSERT INTO t_user (name, age) VALUES ('Alice', 25), ('Bob', 30);
会话 1
-- 关闭自动提交
SET autocommit = 0;

-- 开始事务
START TRANSACTION;

-- 查询初始数据
SELECT * FROM t_user;
会话 2
-- 关闭自动提交
SET autocommit = 0;

-- 开始事务
START TRANSACTION;

-- 更新数据
UPDATE t_user SET age = 35 WHERE name = 'Bob';

-- 查询更新后的数据
SELECT * FROM t_user;
会话 2 提交事务
COMMIT;
会话 1 再次查询
-- 再次查询数据
SELECT * FROM t_user;

结果分析

  1. 会话 1 第一次查询

    • 查询结果将是初始数据:
      +----+-------+-----+
      | id | name  | age |
      +----+-------+-----+
      |  1 | Alice |  25 |
      |  2 | Bob   |  30 |
      +----+-------+-----+
      
  2. 会话 2 更新数据并查询

    • 查询结果将是更新后的数据:
      +----+-------+-----+
      | id | name  | age |
      +----+-------+-----+
      |  1 | Alice |  25 |
      |  2 | Bob   |  35 |
      +----+-------+-----+
      
  3. 会话 2 提交事务

    • 会话 2 提交事务后,更新的数据已经持久化到数据库中。
  4. 会话 1 再次查询

    • 查询结果仍然是初始数据,因为会话 1 的事务在开始时创建了一个 Read View,这个 Read View 记录了事务开始时所有活跃事务的 ID。
    • 由于会话 1 的事务在开始时记录了会话 2 的事务 ID(假设为 101),即使会话 2 的事务已经提交,会话 1 的事务仍然只会看到事务开始时的数据版本。
      +----+-------+-----+
      | id | name  | age |
      +----+-------+-----+
      |  1 | Alice |  25 |
      |  2 | Bob   |  30 |
      +----+-------+-----+
      

详细解释

  1. Read View 的创建

    • 当会话 1 开始事务时,会创建一个 Read View,记录了当前所有活跃事务的 ID。
    • 假设会话 1 的事务 ID 是 100,会话 2 的事务 ID 是 101。
  2. Read View 的作用

    • 会话 1 的 Read View 记录了事务 ID 101 是活跃的。
    • 当会话 1 再次查询数据时,会检查每一行的 DB_TRX_ID
      • 如果 DB_TRX_ID 小于 m_up_limit_id(即 100),则该版本是已提交的,可以被看到。
      • 如果 DB_TRX_IDm_ids 列表中(即 101),则该版本是未提交的,不能被看到。
    • 即使会话 2 的事务已经提交,会话 1 的事务仍然会使用最初的 Read View,因此只能看到事务开始时的数据版本。
  3. 事务提交的影响

    • 会话 2 提交事务后,更新的数据已经持久化到数据库中,但会话 1 的事务仍然会使用最初的 Read View,因此不会看到这些更改。

结论

  • 未提交的数据:在一个会话中未提交的事务所做的更改,其他会话是无法看到的。
  • 已提交的数据:即使其他会话提交了更改,当前事务在 REPEATABLE READ 隔离级别下仍然会使用最初的 Read View,因此只能看到事务开始时的数据版本。

标签:事务,Read,MySQL,会话,提交,MVCC,ID,View
From: https://blog.csdn.net/a772304419/article/details/144016847

相关文章

  • WINDOWS环境下的MYSQL安装
    一、下载安装包1、进入官网,下载mysql社区版安装包https://dev.mysql.com/downloads/installer/MySQL::下载MySQL安装程序 二、安装1、安装包下载完成后,双击安装包,进入安装指引2、安装指引中,选择自定义安装Custom,并点击【下一步】 3、选择mysql服务 4、添加服务......
  • MySQL索引
      2.1索引概述2.1.1介绍索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。在无索引情况下,就需要从......
  • 【MySQL】备份与恢复
    文章目录一、前置准备二、备份三、恢复一、前置准备先创建库createdatabasetest;使用test数据库usetest;创建表createtabletest(idint,namevarchar(20));插入数据insertintotestvalues(1,"张三");insertintotestvalues(2,"李四");in......
  • MySQL的补充知识点
    SQL注入?定义:MySQL的sql注入是一种攻击技术,攻击者通过再应用程序中插入恶意的sql代码,从而控制应用程序和服务器之间的交互,当应用程序未对用户输入进行适当验证或转义时,这种攻击就可能发生。发生的情况:未对用户输入进行验证:当Web应用程序直接将用户输入拼接到SQL查询语句中,而......
  • MySQL 查询做了这些优化后,纵享丝滑…… 转载
    一、前言 在程序上线运行一段时间后,一旦数据量上去了,或多或少会感觉到系统出现延迟、卡顿等现象,出现这种问题,就需要程序员或架构师进行系统调优工作了。 其中,大量的实践经验表明,调优的手段尽管有很多,但涉及到SQL调优的内容仍然是非常重要的一环,本文将结合实例,总结一些工作中......
  • MySQL面试攻略:从基础到高级,全面解析
    ......
  • MySQL原理简介—7.redo日志的底层原理
    大纲1.redo日志对事务提交后数据不丢失的意义2.redo日志文件的构成3.redo日志会写入到RedoLogBlcok中4.redo日志如何写入到RedoLogBlcok中5.RedoLogBuffer解析6.RedoLogBuffer的刷盘时机7.undolog回滚日志原理 1.redo日志对事务提交后数据不丢失的意义(1)redo......
  • MySQL原理简介—8.MySQL并发事务处理
    大纲1.简单总结增删改SQL语句的实现原理2.多个事务同时执行的场景遇到的问题3.多个事务并发更新或查询时可能出现的问题4.SQL标准中对事务的4个隔离级别5.MySQL是如何支持4种事务隔离级别的6.Spring事务注解了如何设置隔离级别7.uodolog多版本链介绍8.基于undolog多版本......
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现七
    一、前言介绍:免费学习:猿来入此1.1项目摘要主要源于互联网技术的快速发展和电子商务的普及。随着网络技术的不断进步,人们越来越依赖于互联网进行购物、交易和沟通。电子商务的兴起为在线拍卖提供了广阔的市场和便利的条件。在线拍卖系统通过搭建一个虚拟的拍卖平台,将传统......
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现八
    一、前言介绍:免费学习:猿来入此1.1项目摘要主要源于互联网技术的快速发展和电子商务的普及。随着网络技术的不断进步,人们越来越依赖于互联网进行购物、交易和沟通。电子商务的兴起为在线拍卖提供了广阔的市场和便利的条件。在线拍卖系统通过搭建一个虚拟的拍卖平台,将传统......