《MySQL学习》 事务隔离 与 MVCC

news2025/6/7 13:19:39

《MySQL学习》 事务隔离

一.事务的概念

事务保证一组数据要么全部成功要么全部失败,MySQL的事务基于引擎(如InnoDB)实现。

二.事务的隔离性与隔离级别

MySQL的标准隔离级别:

  1. 读未提交 : 一个事务还没提交时,它做的变更就能被别的事务看到
  2. 读已提交 : 一个事务提交之后,它做的变更才会被其他事务看到。
  3. 可重复读 : 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
  4. 串行化 : 是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行

注意 : MySQL 默认的隔离级别是可重复读,而Oracle是读已提交

MySQL实现不同的隔离级别是基于MVCC,在不同的时机快照读创建视图(区别于MySQL 的 view 视图)。

  1. 读未提交(RU)没有视图概念

  2. 在(RC)读已提交的隔离级别下,会在每个语句执行前创建视图(而不是事务开始时),因此是可以读到事务提交前其他事务已经提交的数据

  3. 在(RR)可重复读的隔离级别下,会在执行第一条select语句时创建视图,直到事务提交,因此只能读到事务开始前其他事务已经提交的数据,当前事务前后读取到的数据都是一致的

  4. 串行化(SC)则是通过加锁

三.事务隔离的实现

在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。 redo log (重做日志)记录变更记录,由 undo log 记录回滚日志

在查询这条记录的时候,不同时刻启动的事务会有不同的 read-view。如图中看到的,在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)

img

回滚日志不会一直保留,一个事务对应一个视图,有的事务还对应undolog,当对应undolog的事务之前的事务都提交了,对应的视图也也跟随删除了,则当前事务提交时,视图删除,undolog也将删除

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

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

相关文章

网络变压器与不同芯片之间的匹配原则及POE通讯产品需要注意哪些方面

Hqst盈盛电子导读:网络变压器与不同芯片之间的匹配原则及POE通讯产品需要注意哪些方面网络变压器与不同芯片之间的匹配原则:一,电流型PHY芯片一般要配的网络变压器:1、变压器PHY侧3线共模电感 (更适合POE产品&#xff…

Nginx_3

Rewrite功能配置 Rewrite是Nginx服务器提供的一个重要基本功能,是Web服务器产品中几乎必备的功能。主要的作用是用来实现URL的重写。www.jd.com 注意:Nginx服务器的Rewrite功能的实现依赖于PCRE的支持,因此在编译安装Nginx服务器之前,需要安…

Thinkphp大型进销存ERP源码/ 进销存APP源码/小程序ERP系统/含VUE源码支持二次开发

框架:ThinkPHP5.0.24 uniapp 包含:服务端php全套开源源码,uniapp前端全套开源源码(可发布H5/android/iod/微信小程序/抖音小程序/支付宝/百度小程序) 注:这个是全开源,随便你怎么开,怎么来&a…

DHCP基础

DHCP基础产生背景传统手工配置的缺陷DHCP基本概念及优点DHCP工作原理DHCP租期更新DHCP相关配置命令解析产生背景 因为现在上网的人已经变得非常多了,上网又需要分配IP地址,那么如何进行IP地址的分配?如果是手动分配IP地址,在人数…

深眸科技以科技赋能智慧物流搭建,实现周转箱拆垛作业智能化

数字化时代下市场竞争的核心要素转化为科技的竞争,智能化技术的投入是企业占据市场竞争绝对优势的重要支撑。深眸科技凭借轻辙视觉引擎实现周转箱拆垛作业的智能化突破。人力成本增加,企业积极转变特别是在后疫情时代,人力成本迅猛增加&#…

Docker进阶 - 7. docker network 网络模式之 host

目录 1. host 模式概述 2. host模式代码语法 3. docker inspect 查看 bridge/host模式 容器元数据 4. ip addr 进入 tomcat83 (host模式) 容器内部查看容器ip 5. 如何访问启动 tomcat83 (host模式) 1. host 模式概述 直接使用宿主机的IP地址与外界进行通信,不…

警惕!爆火的ChatGPT 暗藏的安全隐患 数字信息的未来

近段时间以来,ChatGPT 在各大平台网站是刷屏一般的存在,随之而来的各式各样的赞美与吁叹,更是不断地勾起人们的好奇心理。但在几天铺天盖地式的营销之后,ChatGPT 的舆论在2月7日晚的舆论风口就发现了极大的转变,各平台…

2010-2019年290个城市经济发展与环境污染数据

2010-2019年290个城市经济发展与环境污染数据 1、时间:2010-2019年 2、统计口径:全市 3、来源:城市统计NJ,缺失情况与年鉴一致 4、指标包括: 综合经济:地区生产总值、人均地区生产总值、地区生产总值增…

云原生系列之使用 prometheus监控远程主机实战

文章目录前言一. 实验环境二. 安装node_exporter2.1 node_exporter的介绍2.2 node_exporter的安装三. 在prometheus服务端配置监控远程主机3.1 在server端配置拉取node的信息3.2 重启prometheus3.3 通过浏览器查看prometheus总结前言 大家好,又见面了,我…

Pyqt5小案例,界面与逻辑分离的小计算器程序

直接看下最终效果: 使用技术总结 使用Designer设计界面 使用pyuic5命令导出到python文件 新建逻辑处理文件,继承pyuic5导出的文件的类,在里面编写信号与槽的处理逻辑 使用Designer设计界面 要使用Designer,安装一个Python库即…

Qml学习——鼠标事件处理MouseArea

最近在学习Qml,但对Qml的各种用法都不太熟悉,总是会搞忘,所以写几篇文章对学习过程中的遇到的东西做一个记录。 学习参考视频:https://www.bilibili.com/video/BV1Ay4y1W7xd?p1&vd_source0b527ff208c63f0b1150450fd7023fd8 其…

解决:FTP协议路径在资源管理器打开,总是默认跳转到某个浏览器打开

解决:FTP协议路径在资源管理器打开,总是默认跳转到某个浏览器打开一问题描述:(1)电脑原本能够在资源管理器里面,正确打开ftp协议路径地址,不会自动跳转到其他浏览器里面。(2&#xf…

【自学Docker 】Docker search命令

大纲 Docker search命令 docker search命令教程 docker search 命令用于从 Docker Hub 查找镜像。 docker search命令语法 haicoder(www.haicoder.net)# docker search [OPTIONS] TERMdocker search命令参数 参数描述docker search --filter设置过滤条件。docker search -…

Set集合的特点,HashSet去重的几个重要问题

Set集合的特点:无下标,无序(新增顺序和遍历顺序不一致,新增顺序不影响遍历顺序,而且有一个固定顺序),去重(不允许重复记录)public class TestOne {public static void main(String[] args) {// Set集合的特点&#xff…

Python 3 中文编码 ,首先要会

Python 中文编码 前面章节中我们已经学会了如何用 Python 输出 “Hello, World!”, 英文没有问题, 但是如果你输出中文字符 “你好,世界” 就有可能会碰到中文编码问题。 Python 文件中如果未指定编码,在执行过程会出现报错&…

Android Camera(三)Camera Service的初始化代码分析(AndroidR)

highlight: a11y-dark 1.APP CameraManager初始化 CameraManager初始化代码较少,放在这里进行讲解,CameraManager是一个用来管理相机的系统服务,可以通过此服务获取到相机设备和相机信息,在frameworks/base/core/java/android/a…

下载好python后,怎么打开,python怎么进入编程界面

大家好,给大家分享一下python下载安装好后怎么打开,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、python第一次怎么打开 python第一次打开方法如下: winr快捷键打开运行窗口,在运行窗口输入栏中输入…

基于C#制作一个飞机大战小游戏

此文主要基于C#制作一个飞机大战游戏,重温经典的同时亦可学习。 实现流程1、创建项目2、界面绘制3、我方飞机4、敌方飞机5、子弹及碰撞检测实现流程 1、创建项目 打开Visual Studio,右侧选择创建新项目。 搜索框输入winform,选择windows窗体…

线程的生命周期和状态中方法的详解

点个关注,必回关 一、线程的生命周期和状态图: 图一: 图二 二、线程状态 1:新建 2:就绪(拿到执行权开始运行) 3:运行 4:阻塞 5:死亡 三、线程生命周期…

CUDA中的动态并行

CUDA的动态并行 文章目录CUDA的动态并行1. 介绍1.1. 简述警告:与父块的子内核显式同步(即在设备代码中使用 cudaDeviceSynchronize())在 CUDA 11.6 中已弃用,并计划在未来的 CUDA 版本中删除。1.2. 术语2. 执行环境和内存模型2.1.…