MySQL的MVCC

MVCC(多版本并发控制)multiversion concurrency control

读读并发:可以并发

读写并发(innoDB):MVCC机制解决 

写写:互斥

快照读:不加锁的简单select属于快照读,即不加锁的非阻塞读

快照读的基础是undolog版本链

聚簇索引中的隐藏列

trx_id:事务对数据改动时,事务将id赋值给trx_id

roll_pointer:旧值指针,roll_pointer生成undolog链

ReadView:快照读,它会告诉我们应该看到的快照

由四个部分组成:

1.creator_trx_id: 创建ReadView的事务的id

2.m_ids:活跃事务(在执行未提交)的id

3.min_trx_id: m_ids中的最小值(用于比较)

4.max_trx_id: 生成ReadView时,innoDB将要分配的下一个事务id

事务A(id:100)插入数据18;之后事务B(id:200)和C(id:300)并发执行,此时

creator_trx_id: 200

m_ids: 200 300

min_trx_id:200

max_trx_id:301

事务B(id:200)第一次查询时,会将隐藏字段trx_id(已提交事务A 的id)和min_trx_id进行比较,trx_id(100) 小于min_trx_id(200),则B可以查询到A的数据18;

此时事务C(300)修改了数据为20,并提交;

当事务B第二次查询时,但200<300<301,说明事务C是和事务B在同一时间段执行的,B就不能读到C的数据,通过 undo log版本链,此时读到的数据还是之前的18;

总之:ReadView保证可重复读,通过逻辑判断的非阻塞同步机制

mysql事务的本质:多线程访问同一资源的彼此之间的排序规则

控制事务的底层机制就是锁

锁的底层是MVCC

MVCC使用的是MySQL的Undolog(回滚日志)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘大数据时代的内存数据存储、数据缓存:redis缓存框架!

介绍&#xff1a;Redis 是一个开源的、基于内存的数据存储系统&#xff0c;它也可以持久化数据到硬盘上。Redis 以其高性能、高可靠性和丰富的数据结构支持而著称&#xff0c;在现代应用程序中被广泛用作数据库、缓存和消息中间件。 主要特点&#xff1a; 键值存储&#xff1a;…

Unity工程没有创建.sln文件,导致打开C#文件无法打开解决方案

最近又开始折腾些Unity的小项目&#xff0c;重新遇到一些常见的小问题 点击报错文件 却没有打开文件 于是查看了下打开Window->Package Manager 选择Unity Registry 搜索Visual Studio Editor&#xff0c;发现并没有安装 同理&#xff0c;也可以安装VSCode的插件 问题解决了…

JVM多线程读写和锁

文章目录 1 原子性2 可见性3 有序性4 CAS5 synchronized 优化5.1 轻量级锁5.2 锁膨胀5.3 自旋5.4 偏向锁5.5 其他优化 1 原子性 问题:两个线程对初始值为 0 的静态变量 i 一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;结果是 0 吗&#xff1f; i产生…

.NET集成IdGenerator生成分布式全局唯一ID

前言 生成分布式唯一ID的方式有很多种如常见的有UUID、Snowflake&#xff08;雪花算法&#xff09;、数据库自增ID、Redis等等&#xff0c;今天我们来讲讲.NET集成IdGenerator生成分布式全局唯一ID。 分布式ID是什么&#xff1f; 分布式ID是一种在分布式系统中生成唯一标识符…

Unity - transform使用

Test_03 TransformTest 控制物体位置和物体间的父子关系 public class TransformTest : MonoBehaviour {void Start(){// 【获取位置】// 世界坐标中物体的位置Debug.Log(transform.position);// 物体相对于父物体的位置Debug.Log(transform.localPosition);// 【…

实用的SQLite数据库可视化管理工具推荐

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。今天推荐7款实用的SQLite数据库可视化管理工具(GUI)&#xff0c;帮助大家更好的管理SQLite数据库。 什么是SQLite&#xff1f; SQLite是一个…

【每日一题】2.LeetCode——删除有序数组中的重复项

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

JavaScript中的事件

&#xff11; 事件&#xff08;Event&#xff09; 事件也就是用户或者浏览器执行的某种动作&#xff0c;而JS与Html之间的交互是通过事件而来的。使用仅在事件发生时执行的**监听器&#xff08;事件处理程序&#xff09;**来订阅事件。web浏览器可以发生多种事件&#xff0c;在…

【Linux】yum本地配置

配置将来是在干什么&#xff1f; yum会根据/etc/yum.repos.d/该路径下面的配置文件&#xff0c;来构成自己的下载路径&#xff0c;&#xff08;根据OS版本&#xff0c;根据你要下载的软件&#xff09;&#xff0c;yum帮助我们下载&#xff0c;安装 一般的机器&#xff0c;内置…

10.常用统计分析方法——主成分分析和因子分析

基础知识&#xff1a; 主成分分析概念 主成分分析PCA&#xff1a;是一种数据降维的技巧&#xff0c;将大量相关变量转化为一组很少的不相关变量&#xff0c;这些无关变量称为主成分。 在特征选择方法中有一种方法是方差过滤&#xff0c;即如果一个特征的方差很小&#xff0c…

yarn的安装及使用教程

Yarn 是一个快速、可靠、安全的包管理工具&#xff0c;用于管理 JavaScript 项目的依赖项。下面是关于 Yarn 的安装和基本使用的详细教程&#xff1a; 安装 Yarn 访问 Yarn 官网 并按照指示下载适合你操作系统的安装程序。安装程序会自动安装 Yarn&#xff0c;并将其添加到系…

强化学习:MuJoCo机器人强化学习仿真入门(1)

声明&#xff1a;我们跳过mujoco环境的搭建&#xff0c;搭建环境不难&#xff0c;可自行百度 下面开始进入正题&#xff08;需要有一定的python基础与xml基础&#xff09;&#xff1a; 下面进入到建立机器人模型的部分&#xff1a; 需要先介绍URDF模型文件和导出MJCF格式 介绍完…

CNAS中兴新支点——软件测试中的非功能测试包含哪些测试内容

软件测试中的非功能测试是指对软件产品在功能之外的其他特性进行测试&#xff0c;包括性能测试、可靠性测试、安全性测试、易用性测试、可维护性测试等。 1、性能测试&#xff1a;性能测试是对软件产品在特定条件下的性能进行测试和评估。包括负载测试、强度测试、数据库容量测…

Flink中的时间和窗口(时间语义,水位线,窗口,迟到数据的处理)

目录 Flink中的时间和窗口 1时间语义 1.1Flink中的时间语义 1.1.1处理时间 1.1.2事件时间 1.2那种时间语义更重要 2 水位线 2.1 事件时间和窗口 2.2 什么是水位线 2.3 如何生成水位线 2.3.1使用WatermarkGenerator 2.3.2使用SourceFunction 2.4 水位线的传递 2.5 水位…

Adobe XD 55.2.12.2软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; Adobe XD 55.2.12.2是一款专业级的图形界面UI/UX设计工具&#xff0c;拥有丰富的功能和强大的性能。它集成了原型设计、界面设计和交互设计等多种功能…

从0开始学习C++ 第十一课:常量

第十一课&#xff1a;常量 学习目标&#xff1a; 了解什么是常量以及为什么要使用常量。学习如何在C中定义常量。理解字面量常量、const关键字、宏定义 学习内容&#xff1a; 常量的概念 概念&#xff1a; 常量是在程序执行过程中其值不会改变的量。使用常量可以提高程序的可…

系统移植及相关介绍

一.系统移植 系统移植&#xff08;System Porting&#xff09;是将一个操作系统从一种硬件平台迁移到另一种硬件平台的过程。这个过程涉及将操作系统的内核和相关的软件组件调整和适配到新的硬件环境中。 1.嵌入式系统的特点 三低&#xff1a;功耗低 成本低 体积小 两高&am…

【蓝桥备赛】质因数个数——数论

题目链接 质因数个数 个人思路 根据算术基本定理&#xff0c;每个大于1的数都可以写成若干质数相乘的形式。因此&#xff0c;我们从小到大依次求出这个数可能存在的质因数。 参考代码 Java import java.util.Scanner;public class Main {public static void main(String[…

android 扫描某个包下的所有类

注意事项 如果在用Android Studio开发过程中&#xff0c;如果新增了类&#xff0c;扫描不到。只能把APP卸载了&#xff0c;才能扫描到。 可能是Instance Run 的影响。 后面研究一下这篇文章&#xff0c;看看能不能解决 Android 遍历Apk下的所有类文件 package com.trs.nmip.…

Goroutines 和 Channels

为了提高效率&#xff0c;有时需要两个函数一起运行。 f() // 程序会等到 f() 执行完才会执行下一步 go f() // 创建一个 goroutine 来调用 f() ,程序不等待&#xff0c;直接执行下一步1. 下述代码中主函数中的 goroutine 计算了第45个斐波那契数 package mainimport ("…