mysql中的mvcc机制

2023-11-03

MVCC全称是【Multi-Version ConCurrency Control】即多版本控制协议。

MVCC的主要是靠在每行记录上增加隐藏列和使用undo log来实现的,隐藏列主要包括,改行数据创建的版本号(递增的),删除时间,指向undo log的指针等。MVCC是读不加锁的,只有在写的时候才会加锁,从而提高的并发的效率。
那么MVCC是如何保证读写隔离的呢?主要是通过快照读和当前读两个操作。

  • 快照读
    MVCC为了保证并发的效率,在进行读取数据的时候是不加锁的,在执行select的时候(不带锁的普通select),会先读取当前数据的版本号,如果在select还没返回结果时,有事务将此行数据进行了修改,那么版本号就会比执行select的时候的大,所以为了保证select读取数据的一致性,就只会读取小于或等于当前版本的数据,这个历史版本的数据就是从undo log中获取到的。
  • 当前读
    当执行insert、update、delete的时候,是读取的当前最新的版本数据,并且会给当前记录加上锁,用来保证在操作的时候不会被别的事务将版本号进行修改。

像普通的select就是快照读即读取的有可能就是数据的历史版本。

insert、update、delete、select ... lock in share mode 和select ... for update 读取的就是当前读,即读取的都是数据的最新版本。

通过MVCC机制保证了多个事务间的读写隔离,从而实现了事务的隔离性。

总结

MySQL事务的ACID,一致性是最终目的。
保证一致性的措施有:
A原子性:靠undo log来保证(异常或执行失败后进行回滚)。
D持久性:靠redo log来保证(保证当MySQL宕机或停电后,可以通过redo log最终将数据保存至磁盘中)。
I隔离性:事务间的读写靠MySQL的锁机制来保证隔离,事务间的写操作靠MVCC机制(快照读、当前读)来保证隔离性。
C一致性:事务的最终目的,即需要数据库层面保证,又需要应用层面进行保证,并且MySQL底层通过两阶段提交事务保证了事务持久化时的一致性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql中的mvcc机制 的相关文章

  • SQL - 选择具有最大值的所有行

    我有这个 SQL 查询 SELECT id COUNT AS price FROM SELECT FROM rt WHERE somecondition AS st JOIN tt ON st id tt id GROUP BY id 现在
  • MYSQL:如何从姓氏中找到player_id?

    我现在尝试使用非标准化 摘要 表中的数据填充 testMatch 表 如下 测试匹配表 Field Type Null Key Default Extra match id int 11 NO PRI NULL match date dat
  • MySql 5.0 可以查看位于另一台服务器上的表吗

    MySql 5 0 视图可以使用位于另一台服务器上的表吗 创建这样的视图的语法是什么 联合表 http dev mysql com doc refman 5 0 en federated storage engine html http d
  • InnoDB vs. MyISAM 插入查询时间

    我有一个大型 MySQL 表 约 1000 万行 6 5G 用于读取和写入 它是MyISAM 由于MyISAM 的所有表写入锁 我获得了很多锁 我决定尝试迁移到 InnoDB 推荐用于读 写表 它只锁定写入时的特定行 转换后 我测试了插入语
  • 无法将代码优先迁移应用到 mysql 数据库

    我正在使用 EF 代码优先模型开发 asp net mvc 我正在尝试首先使用 EF 代码将迁移应用到我的项目中 我正在使用 MySql 数据库 目前我使用的是 EF 4 3 1 版本和 6 6 4 0 版本的 mysql Connecto
  • JS 无法查询 MySQL 数据库。错误:connection.query 不是函数

    尝试查询我的 mySQL 数据库 但我不能 因为我得到了TypeError connection query is not a function错误 有谁知道为什么吗 我不知道为什么会发生这种情况 数据库 js const fs requi
  • 安装 mysql2 时出错:无法构建 gem 本机扩展

    我在尝试安装时遇到一些问题mysql2Rails 的宝石 当我尝试通过运行安装它时bundle install or gem install mysql2它给了我以下错误 安装 mysql2 时出错 错误 无法构建 gem 本机扩展 我该如
  • PHP 和 MySQLi 中没有选择数据库错误[重复]

    这个问题在这里已经有答案了 我必须从 MySQL 数据库中选择数据 我一直在寻找答案 但仍然没有找到 我正在学习W3School http www w3schools com php php mysql select asp 我的 MySQ
  • 我不小心锁定了 MySQL 的 root

    我在 OS X 上使用 MySQL 并使用删除了所有 root 用户DROP USER 然后我又添加了其中一些并做了GRANT ALL on to root localhost 然后在验证确实是的之后注销 我可以登录并执行一些特权操作 不幸
  • MySql 完全联接(联合)和多个日期列的排序

    一个相当复杂的 sql 查询 我可能使它变得更加困难 我有两张桌子 消息 newsid 日期时间 新闻文本 图片 图片ID 日期时间 imgPath 两者没有关系 我只是在新闻 图片创建的日期之前加入 到目前为止的 SQL SELECT F
  • 重新排列mysql中的主键

    从MySQL表中删除一些行后如何重新排列主键列值 例如 一个包含 4 行数据的表 主键值为 1 2 3 4 当删除第2行和第3行时 第4行的键值变为2 请帮助我找到解决方案 为什么要这样做 你不需要重新排列您的密钥 因为它只是记录的数字和标
  • 为什么在 MAC OSX 上编译简单的 mysql c 应用程序时不断收到未定义的符号?

    我正在使用 MACOS 并尝试编写一个 测试 mysql 应用程序 该应用程序仅测试与本地数据库的连接 include
  • MySQL 多个 IN 条件对同一个表进行子查询

    我有多个带有子查询的 IN 条件 SELECT S name S email FROM something S WHERE 1 NOT IN SELECT id FROM tags WHERE somethingId S id AND 2
  • 工厂模式数据库连接

    我正在尝试使用 MySQL 实现数据库连接上的工厂模式 SQL Server 面临奇怪的错误 你调用的对象是空的 在 SQL 命令对象上 internal class SqlServerDB IDatabase private SqlCon
  • PHP/MySQL:检索邻接列表模型中的单个路径

    有没有什么有效的方法可以在不限制深度的情况下根据节点的ID检索邻接列表模型中的单个路径 就像如果我有一个名为 Banana 的节点的 ID 我可以获得以下路径 Food gt Fruits gt Banana 如果不可能的话也不是什么大问题
  • 数据太长,导致列错误(包含国家字符)

    我必须移植一些DBS变成独立的MySQL版本 5 0 18运行于Windows 7 64 位我遇到了一个困扰我的问题 如果我尝试将任何国家 Unicode 字符插入varchar我收到错误 ERROR 1406 22001 Data too
  • mysql变量赋值:如何强制赋值顺序?

    由于mysql是一种声明性语言 我找不到强制赋值变量顺序的方法 采取这个查询 SET v1 0 SET v2 0 SELECT v1 v2 FROM MyTable table WHERE v1 v2 is not null AND v2
  • Mysql - 如何比较两个 Json 对象?

    将整个 MySql json 列与 json 对象进行比较的语法是什么 以下不起作用 select count criteria from my alerts where criteria industries 1 locations 1
  • 如何让MySQL数据库完全在内存中运行?

    我注意到我的数据库服务器支持内存数据库引擎 我想让一个已经运行 InnoDB 的数据库完全在内存中运行以提高性能 我怎么做 我探索了 PHPMyAdmin 但找不到 更改引擎 功能 假设您了解注释中提到的使用 MEMORY 引擎的后果 并且
  • SimpleSAMLPHP 重定向循环

    我们正在尝试使用自定义 mysql 数据库设置 sso 但它在以下两个请求之间进入无限循环 POST http 192 168 0 15 simplesaml module php core loginuserpass php 设置Cook

随机推荐

  • UPF learing2:set_level_shifter

    set level shifter 设置level shifter strategy在实现的过程中 level shifter name domain domain name elements list exclude elements l
  • python:10个小孩围成一圈分糖果

    10个小孩围成一圈分糖果 老师顺次分给每个人的糖果数为12 2 8 22 16 4 10 6 14 20 然后按以下规则调整 所有小孩同时把自己的糖果分一半给右边的小孩 糖果数如果变为奇数的人 再向老师补要一块 那多少次调整后 大家的糖果数
  • JavaScript——插入排序、堆排序

    一 插入排序 插入排序是一种简单直观的排序算法 它比冒泡排序 选择排序都更有效率 基本思路 插入排序的工作原理是通过构建有序序列 对于未排序元素 在已排序序列中从后向前扫描 找到对应的位置并插入 插入排序将数组分成 已排序 和 未排序 两部
  • 华为OD机试--路灯覆盖问题

    一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间的距离是100m 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 未照明区间的长度和 输入描述 第一行为一个数N 表示灯的个数 1 100000 第二行为N个空格分隔
  • 请问如何用nodejs通过post发送multipart/form-data类型的http请求?

    请问如何用nodejs通过post发送multipart form data类型的http请求 发布于 4 年前 作者 xuhaijinsky2008 24777 次浏览 请问如果用nodejs通过post发送multipart form
  • Selenium成长之路-11简单对象定位之XPATH方法

    XPath是一种在HTML文档中定位元素的语言 因为 HTML 可以看做 XML 的一种实现 所以 selenium 用 户可是使用这种强大语言在 web 应用中定位元素 XPath基于XML的树状结构 提供在数据结构树中找寻节点的能力 X
  • static的用法

    1 static修饰普通变量 static修饰全局变量 1 作用域 改变链接属性 只在本文件有效 即使extern外部声明也不行 其他文件可定义相同名字的变量 2 初始化 只能被初始化一次 如果是整型不初始化就会自动赋值为0 字符型初始化为
  • 【Spring】aop的底层原理

    欢迎来到 边境矢梦 的csdn博文 本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 我是边境矢梦 一个正在为秋招和算法竞赛做准备的学生 喜欢的朋友可以关注一下 下次更新不迷路 Ps 月亮越亮说明知识点越重要 重要性
  • 群晖nas怎么上传整个文件夹_处理群晖NAS中的烦人@eaDir文件夹

    今天发现NAS文件夹里面有很多 eaDir文件夹 和Mac OS X里的 DS Store类似 很烦人 找了解决方法 0 0 ssh登录群晖 控制面板里面打开SSH 0 1 Windows或者Mac 用 ssh 用户名 NAS IP地址登录
  • 1.进程与线程

    Java多线程文章目录 目录 1 进程与线程 Java程序启动至少会有两个线程启动 2 创建Java线程三种方式 run 与start 区别 第一种 继承Thread类 第二种 实现Runnable接口 两种方式区别 练习项目 第三种 实现
  • 通俗理解条件概率、条件期望、条件方差

    写在前面 求 条件XX 时 对 条件 的理解可以是 把 XX条件 作为新的基本事件空间 总体看待 而忽略除这个条件以外的 类似于用摄像机照相时 一开始是整个画面 当得到 XX条件 的约束后 镜头聚焦 画面缩小至代表那个条件的小空间上 一 条
  • Python-爬虫(期末报告)

    爬取的是房价网的数据 然后进行展示 初学爬虫 和同组的小伙伴 其实一个组就俩人 一起写的 我写的爬取 只用了正则表达式拿到网页源码里我想要的数据 还有个AJAX请求直接抓取相应对象然后拿到其中有用的数据即可 注释没写完 另一个小伙伴拿我爬取
  • Fully Convolutional Adaptation Networks for Semantic Segmentation

    参考 论文解析之 Fully Convolutional Adaptation Networks for Semantic Segmentation 云 社区 腾讯云 论文网址 Fully Convolutional Adaptation
  • C语言二维数组作为函数参数

    设有整型二维数组a 3 4 如下 0 1 2 34 5 6 78 9 10 11 它的定义为 int a 3 4 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000 各下标变量的首地址及其值如图所示 前面介绍过
  • Android sdk 收集信息,采集SDK-Android 报错

    采集SDK Android 报错 small detect model 找不到 这是说明文档 https ai baidu com docs Face Android SDK top 文档里完全没提到这个文件 我想知道这个文件在哪下载 有什
  • QList中的removeAt()

    QList removeAt removeAt后其他元素的索引值会相应的减小 QList
  • 图像生成质量fid、inception score、KID计算

    FID 简介 fid是一个非常常用的评估图像生成质量的指标 图像生成的论文中经常会用到 fid是一种度量两个图片数据集相似度的方法 我们生成的图片与真实图片越相似越好 相似度高对应的是fid值小 安装 想进一步学的的伙伴可以从理论出发 然后
  • 封装自己的SDK

    我们在开发Spring项目时常常会引入各种xxx spring boot starter的依赖包 然后在配置文件中填入必要的信息 就可以使用依赖提供好的容器 这里是在鱼皮新项目直播中学习到的 特此记录一下 可在未来封装自己的SDK进行封装与
  • openswan安装部署

    Lclient gt Lserver Rserver lt Rclient 172 16 10 16 10 86 10 17 10 86 10 18 192 168 10 16 首先要保证 lclient ping通lserver和rser
  • mysql中的mvcc机制

    MVCC全称是 Multi Version ConCurrency Control 即多版本控制协议 MVCC的主要是靠在每行记录上增加隐藏列和使用undo log来实现的 隐藏列主要包括 改行数据创建的版本号 递增的 删除时间 指向und