【MySQL进阶】事务隔离级别 MVCC

目录

MySQL事务隔离级别

1. 读未提交(Read Uncommitted)

2. 读已提交(Read Committed)

3. 可重复读(Repeatable Read)(默认隔离级别)

4. 串行化(Serializable)

表格总结

 MVCC

概念

工作原理

快照读

当前读

undo log日志版本链

readview


MySQL事务隔离级别

1. 读未提交(Read Uncommitted)

  • 特性:最低的隔离级别,事务可以读取未提交的数据。
  • 问题:会产生脏读(Dirty Read),即一个事务可以读到另一个事务未提交的数据变更。
  • 适用场景:几乎不使用,因为它不能保证数据的一致性。

2. 读已提交(Read Committed)

  • 特性:只能读取已经提交的数据,避免了脏读问题。
  • 问题:可能会产生不可重复读(Non-repeatable Read),即同一事务中的两次读取操作可能会得到不同的结果,因为其他事务可能在中间提交了更新。
  • 适用场景:多数数据库系统(如Oracle)默认的隔离级别,适用于读取数据一致性要求不高的场景。

3. 可重复读(Repeatable Read)(默认隔离级别)

  • 特性:同一事务中多次读取相同数据时,结果是一样的,即使其他事务修改了数据并提交。在MySQL中是默认的隔离级别。
  • 问题:可能会产生幻读(Phantom Read),即同一事务中的两次查询操作可能会因为其他事务插入了(或者删除了)新的行而得到不同的结果。
  • 适用场景:大多数应用程序的默认选择,能较好地平衡并发性和一致性。

4. 串行化(Serializable)

  • 特性:最高的隔离级别,通过对所有读取的数据加锁,强制事务串行执行,避免了脏读、不可重复读和幻读问题。
  • 问题:并发性能较差,因为事务必须依次执行。
  • 适用场景:需要严格一致性的数据操作场景,但因为性能开销较大,一般不常用。

表格总结

隔离级别脏读不可重复读幻读并发性应用场景
读未提交可能可能可能最高几乎不用
读已提交不可能可能可能较高读取一致性要求不高的场景
可重复读不可能不可能可能中等MySQL默认,适用于大多数应用程序
串行化不可能不可能不可能最低数据严格一致性要求高的场景,但较少使用

 MVCC

概念

多版本并发控制(MVCC)是一种用于数据库管理系统中处理并发的机制,旨在提高数据库的并发性能和数据一致性。MySQL中的InnoDB存储引擎采用MVCC来实现隔离级别(可重复读)。

工作原理

MVCC通过维护多个数据版本来允许并发的读写操作,而不需要加锁。 每个事务会看到一个数据的一致性快照,这个快照是在事务开始时生成的。

快照读

MVCC机制实现了快照读,普通select查询就是快照读,快照读到数据有可能不是最新的数据,它主要是为了实现可重复读的事务隔离级别。

当前读

在更新数据时读取的是当前最新的数据,而不是快照数据。

undo log日志版本链

它其实就是把每次修改的数据都会保存一份,然后在每条数据基础上增加两个隐藏列,trx_id,roll_pointer,分别存储当前事务ID和上一版本的数据地址。每次对数据进行修改时,InnoDB会将修改前的数据记录到undo log中,从而保留了数据的多个版本。通过undo log,事务能够回滚到之前的状态,以实现原子性。

readview

在可重复读的事务里面,这个readview视图由未提交的事务id数组和已创建的最大事务id(max_id)组成,因此这个最大的 max_id 可能在数组里面,也可能不在,因为事务最大的id可能先提交,而数组里面的id都是未提交的

[trx_id1,trx_id2],max_id

Undo log和read view是InnoDB实现MVCC的重要组件。undo log记录数据的历史版本,使得事务能够回滚和实现一致性读;read view用于事务读取数据时判断数据版本的可见性。通过这两者的结合,InnoDB实现了高效的多版本并发控制,保证数据的一致性和隔离性。

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

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

相关文章

抖音爬虫-批量下载主页作品

使用说明 config.ini是配置文件,可配置文件名规则、下载视频图文音乐等。 DownloadList.txt是批量下载清单,可配置批量下载类型和地址。 打开软件,选择对应的功能,第一次扫码登录(后续可自动加载cookie登录&#xff…

揭秘循环购模式:消费即收益

大家好,我是你们的电商策略顾问吴军。今天,我将带大家深入探索一种别开生面的商业模式——循环购模式。这种模式究竟有何魅力,能让消费者在享受购物乐趣的同时,还能获得额外的收益?更有趣的是,一些商家通过…

区块链软硬件协同,做产业数字化转型的“安全官” |《超话区块链》直播预告

今年的两会政府工作报告提出:“产业的数字化(行业数字化转型)是发展新质生产力的核心,是推动产业升级实现高质量发展的关键。”全面推进产业数字化,需要技术创新与产业应用深入协同;立足可持续发展的长远目…

Java面试八股之简述spring boot的目录结构

简述spring boot的目录结构 Spring Boot 项目遵循标准的 Maven 或 Gradle 项目布局,并且有一些约定的目录用于组织不同的项目组件。下面是一个典型的 Spring Boot 项目目录结构: src/main/java:包含所有的 Java 源代码,通常按包组…

OpenCV仿射变换实现图像扭曲与旋转

目录 1. 仿射变换 2. 仿射变换的求解 3. 代码实现 3.1 图像扭曲 3.2 图像旋转 参考内容 1. 仿射变换 仿射变换是一种可以表达为乘以一个矩阵(线性变换)再加上一个向量(平移)的变换。在几何中,就是将一个向量空间…

Hive环境搭建(Mysql数据库)

【实验目的】 1) 了解hive的作用 2) 熟练hive的配置过程(Mysql数据库) 【实验原理】 Hive工具中默认使用的是derby数据库,该数据库使用简单,操作灵活,但是存在一定的局限性,hive支持使用第三方数据库&…

Umi-OCR:功能强大且易于使用的本地照片识别软件

Umi-OCR是一款开源且免费的离线OCR(光学字符识别)软件,可让您轻松从照片中提取文本。它支持多种语言,并具有许多其他功能使其成为照片识别任务的绝佳选择。 Umi-OCR的优势 离线操作: Umi-OCR无需互联网连接即可工作&…

html+css 实现文字滚动的按钮

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 文…

手摸手教你前端和后端是如何实现导出 Excel 的?

前言 大家好呀,我是雪荷。在上篇文章(EasyExcel 初使用—— Java 实现多种写入 Excel 功能-CSDN博客)中给大家介绍了 Java 是如何写入 Excel 的,那么这篇算是对上篇文章的拓展,主要介绍前端和后端分别是如何导出数据至…

代码随想录训练营 Day18打卡 二叉树 part06 530. 二叉搜索树的最小绝对差 501. 二叉搜索树中的众数 236. 二叉树的最近公共祖先

代码随想录训练营 Day18打卡 二叉树 part06 一、 力扣530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 : 输入: …

spring boot + vue3 接入钉钉实现扫码登录

1:准备工作 1.1:进入钉钉开放平台创建开发者应用。应用创建和类型介绍,参考下方。 应用类型介绍 - 钉钉开放平台 (dingtalk.com) 应用能力介绍 - 钉钉开放平台 (dingtalk.com) 扫码登录第三方网站 - 钉钉开放平台 (dingtalk.com) 1.2&…

KaiwuDB 产品总监李月飞:让中国物联网用上放心的数据库产品

​2024年7月17日,KaiwuDB 产品总监李月飞受邀于 2024 可信数据库发展大会“能源与政务数据库应用创新”分论坛发表演讲。以下是李月飞主题演讲《深耕数据良田,KaiwuDB 洞见能源产业数字新生力》精华实录。 数据,给能源变革带来新的可能 众所…

TypeScript 简介

文档 typeScript官网中文文档:https://www.tslang.cn/index.html中文文档(简洁点):https://typescript.bootcss.comMDN 前言 JavaScript 引入编程社区已有 20 多年,如今已成为有史以来使用最广泛的跨平台语言之一。JavaScript 最初是一种用…

SSL VPN详细概述

为什么会出现SSL VPN呢?在这之前不是有IPSEC VPN吗? 通过这两个问题我们可以发现多半是IPSEC VPN在某些方面肯定有所欠缺,所以后面在出现了SSL VPN。 之前说过根据组网方式划分,可以分为 client to LAN 和 LAN to LAN 两种 而…

CTF学习笔记汇总(非常详细)零基础入门到精通,收藏这一篇就够了

CTF学习笔记汇总 Part.01 Web 01 SSRF 主要攻击方式如下: 01 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。 02 攻击运行在内网或本地的应用程序。 03 对内网Web应用进行指纹识别,识别企业内部的资产信息。 …

深入分析 Android ContentProvider (十二)

文章目录 深入分析 Android ContentProvider (十二)Android 中 ContentProvider 的系统代码分析(续)1. ContentProvider 的内部实现机制1.1. ContentProvider 的创建与生命周期管理1.2. ContentProvider 的数据访问与处理1.3. ContentProvider 的权限管理…

Go语言---sync.WaitGroup

在Go语言中,给我们提供了用于线程同步的sync.WaitGroup,简单来讲,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。 WaitGroup数据结构 type WaitGroup struct {noCopy noCopystate atomic.Uint64 // 高 32 b…

无人驾驶的未来:AI如何重塑我们的出行世界

无人驾驶汽车,作为人工智能(AI)技术的集大成者,正以前所未有的速度改变着我们的出行方式。从机器学习到计算机视觉,再到人工智能生成内容(AIGC),AI技术的每一次进步都在为无人驾驶汽…

华为手机连接电脑后电脑无反应、检测不到设备的解决方法

本文介绍华为手机与任意品牌电脑连接时,出现连接后电脑无反应、检测不到手机连接情况的解决方法。 最近,因为手机的存储空间愈发紧缺,所以希望在非华为电脑中,将华为手机内的照片、视频等大文件备份、整理一下。因此,需…

公司里的IT是什么?

公司里的IT是什么? 文章目录 公司里的IT是什么?1、公司里的IT2、IT技术3、IT行业4、IT行业常见证书 如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡ 前段时间,在公…