MySQL-MVCC(多版本并发控制)

news/2024/12/27 10:05:00/

MySQL中的MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于提供读-写冲突时的可靠读取。

MVCC通过保存数据在某个时间点的快照来实现这一点,从而避免了传统的锁定方法。在InnoDB存储引擎中,MVCC是通过在每行记录后面保存两个隐藏的列来实现的,这两个列分别保存了这行数据的创建版本号和删除版本号。

创建版本号:事务开始时,会生成一个全局唯一的事务ID,这个ID是事务版本号,每一行数据在被插入或更新时,会将这个版本号作为创建版本号存储。

删除版本号:当行被删除时,并不会立即物理删除,而是将删除版本号存储在该行记录中。

当执行SELECT操作时,MVCC会选择以下行:

创建版本号小于或等于当前事务版本号的行,这意味着它们在事务开始之前已经存在或已创建。

删除版本号大于当前事务版本号或为空的行,这意味着它们在事务开始之前没有被删除。

这样,即使其他事务正在修改数据,也可以提供一致的读取视图。

由于MVCC复杂度较高,实际实现细节可能因存储引擎而异。对于InnoDB存储引擎,通常不需要手动管理版本号,因为这一切都是由InnoDB自动处理的。

以下是一个简单的例子,演示如何在InnoDB中使用MVCC:

-- 假设有一个简单的表users

CREATE TABLE users (

    id INT PRIMARY KEY,

    name VARCHAR(255),

    age INT

);

-- 开始一个新事务

START TRANSACTION;

-- 插入一条记录

INSERT INTO users (id, name, age) VALUES (1, 'Alice', 25);

-- 提交事务

COMMIT;

-- 另一个事务开始后读取users表

START TRANSACTION;

-- 此时,即使另一个事务更新或删除了这条记录,我们仍然能够读取到这条记录的初始版本

SELECT * FROM users WHERE id = 1;

-- 提交事务

COMMIT;

在这个例子中,使用了MVCC来提供一致的读取视图,即使在事务开始后,有其他事务对记录进行了更新或删除操作。


http://www.ppmy.cn/news/1558205.html

相关文章

使用envoyfilter添加请求头

该envoyfilter实现了这样一个功能,如果请求头中含有Sw8,则添加请求头HasSw8: true。 1. 内嵌lua脚本 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata:name: add-header-filternamespace: demo-bookinfo # 可根据实际情况调整命…

React 前端框架入门

这里写目录标题 React 前端框架入门什么是 React?核心特性基本概念1. JSX2. 组件3. State 和 Props4. 生命周期5. React Hooks React 应用示例项目结构如何启动 React 项目参考资料 React 前端框架入门 什么是 React? React 是由 Facebook 开发并开源的…

【JAVA高级篇教学】第五篇:OpenFeign 微服务调用注意事项

在微服务架构中,OpenFeign 是一种常用的 HTTP 客户端工具,用于实现服务之间的调用。它提供了声明式的接口调用方式,大幅简化了开发工作。然而,在实际使用中,需要注意一些细节,尤其是在处理 GET、POST 请求和…

开关电源特点、分类、工作方式

什么叫开关电源随着电力电子技术的发展和创新,使得开关电源技术也在不断地创新。目前,开关电源以小型、轻量和高效率的特点被广泛应用几乎所有的电子设备,是当今电子信息产业飞速发展不可缺少的一种电源方式。 开关电源是利用现代电力电子技…

MySQL三层B+树能存多少数据

结论 bigint类型的索引(8字节),一条数据假设是1KB的话, 三层B树 能存2000万条数据 该题主要考察数据如何在B树中存储的 计算思路 1.计算叶节点的大小 2.计算子节点的个数,由此算出第三层叶子节点的个数(n*n…

前端实习近期小结

有一小段时间没有更新了,年前的业务需求比较多而且急,今日凌晨(2点多还在修改、提交代码到库)还好这次是远程办公,忙完还可以立马洗澡休息.. 忙里偷闲,更新一下前端实习近况吧。现在写这篇博客的心情也比较…

开源轮子 - Apache Common

Apache Common 文章目录 Apache Common一:BeanUtils1:核心功能预览2:深入PropertyUtils3:BeanUtils的高级应用4:ConvertUtils的威力4.1:基本使用4.2:我要的异常呢?4.3:探…

下载运行Vue开源项目vue-pure-admin

git地址:GitHub - pure-admin/vue-pure-admin: 全面ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统(兼容移动端) 安装pnpm npm install -g pnpm # 国内 淘宝 镜像源 pnpm config set registry https://registry.npmmirror.com/…