MYSQL之事务

事务有哪些特性?

四大特性:ACID

  • 原子性:一个事务的操作要么全部成功,要么全部失败。

  • 一致性:是指事务操作前和操作后,数据满足完整性约束,数据库保持一致性状态。

  • 隔离性:事务和事务之间是互不干扰的,MYSQL使用了MVCC机制和next-key lock机制来实现隔离性。

  • 持久性:事务执行完后,数据是持久化到磁盘的,属于永久操作。

  • MYSQL是怎么保证事务的这些特性的?

    • 原子性:是由 undo log(回滚日志)保证

    • 一致性:是由 redo log(重做日志)保证

    • 隔离性:是由 MVCC机制 和 next-key lock机制 保证

    • 持久性:是由 原子性+一致性+隔离性+持久性 保证

 

并行事务会引发什么问题?

同时处理多个事务时,可能出现:脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)

  • 脏读(dirty read)一个事务「读到」了另一个「未提交事务修改过的数据」

  • 不可重复读(non-repeatable read)在一个事务内多次读取同一个数据,出现前后两次读到的数据不一样的情况

  • 幻读(phantom read)在一个事务内多次查询某个符合查询条件的「记录数量」,出现前后两次查询到的记录数量不一样的情况

 

事务的隔离级别有哪些?

同时处理多个事务时,就可能出现:脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)

  • 读未提交:

    • 一个事务未提交时,可以被其他事务看到

    • 可能发生脏读、不可重复读和幻读现象

  • 读已提交:

    • 一个事务提交之后,才能被其他事务看到

    • 可能发生不可重复读和幻读现象

  • 可重复读:

    • 一个事务执行过程中看到的数据,和开始事务时看到的数据是一致的。

    • MySQL InnoDB 引擎的默认隔离级别

    • 可能发生幻读现象

  • 可串化:

    • 对记录加上 读写锁,在多个事务对这条记进行读写操作时,如果发生读写冲突,后访问的事务需等待前一个事务执行完成,才能继续执行。

    • 脏读、不可重复读和幻读现象都不可能会发生。

 

MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读现象(并不是完全解决了)

  • 针对 快照读(select...),数据库采用的是 MVCC机制 来解决幻读,只有某些特殊情况还是会产生幻读。

    • 因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。

  • 针对 当前读(select ... for update),数据库采用的是 next-key lock(记录锁+间隙锁)

    • 因为当执行 select ... for update 语句的时候,会加上 next-key lock,如果有其他事务在 next-key lock 锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好了避免幻读问题。

 

 特殊情况:
  • 事务A开始

  • 事务A执行查询id=5,但id=5这个记录在行中是不存在的,所以查出为null

  • 事务B开始

  • 事务B执行增加id=5的数据

  • 事务B提交

  • 事务A对id=5的数据进行更新操作

  • 事务A执行查询id=5,搜索到了事务B提交的数据

  • 事务A提交

在可重复读隔离级别下,事务 A 第一次执行普通的 select 语句时生成了一个 ReadView,之后事务 B 向表中新插入了一条 id = 5 的记录并提交。接着,事务 A 对 id = 5 这条记录进行了更新操作,在这个时刻,这条新记录的 trx_id 隐藏列的值就变成了事务 A 的事务 id,之后事务 A 再使用普通 select 语句去查询这条记录时就可以看到这条记录了,于是就发生了幻读。

所以MVCC机制并不能完全解决幻读

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试:lock 和 synchronized

一、语法层面 synchronized 是关键字,源码在jvm中,用c语言实现Lock 是接口,源码由jdk提供,用java语言实现使用synchronized时,退出同步代码块锁会自动释放,而使用Lock时,需要手动调用unlock方法…

数学建模完整版

模型与适用题型 微分方程传染病预测模型 神经网络 层次分析法 粒子群算法 matlab 优劣解距离法

停车资产数字化运营管理方案内容包括哪些?

随着新兴信息技术的蓬勃发展,如大数据、云服务、机器学习以及数字孪生等,停车行业正经历着前所未有的变革。这些技术的应用不仅推动了智慧停车领域的迅猛扩张,而且已成为全球各地数字化城市构建和城市治理现代化的关键驱动力。在数字化、平台…

【可实战】测试体系与测试方案设计(业务按公司实际情况,技术可参考通用测试方案)

一、如果我们要测试一个系统,首先我们要了解被测系统的架构 (一)业务架构-从需求里面去了解(角色和行为): 业务模型分析(是一个电商,还是一个企业的crm,还是一个网站&a…

java的volatile

在Java中,线程之间对内存写入操作的可见性是一个重要的问题,因为每个线程都有自己的工作内存,并且线程之间共享主内存。当一个线程修改了共享变量的值,其他线程并不一定能立即看到这个修改,这就是所谓的可见性问题。 例…

STM32H7 QSPI的寄存器和功能介绍

目录 概述 1 认识QSPI 1.1 QSPI介绍 1.2 QUADSPI 主要特性 2 QUADSPI 功能说明 2.1 双闪存模式禁止 2.2 双闪存模式使能 3 QUADSPI 的用法 3.1 间接模式的操作步骤 3.1.1 QUADSPI 间接模式时配置帧模式 3.1.2 写控制寄存器 (QUADSPI_CR) 3.1.3 写通信配置寄存器 (…

6-pytorch - 网络的保存和提取

前言 我们训练好的网络,怎么保存和提取呢? 总不可以一直不关闭电脑吧,训练到一半,想结束到明天再来训练,这就需要进行网络的保存和提取了。 本文以前面博客3-pytorch搭建一个简单的前馈全连接层网络(回归问…

树和二叉树(一)

一、树 非线性数据结构,在实际场景中,存在一对多,多对多的情况。 树( tree)是n (n>0)个节点的有限集。当n0时,称为空树。 在任意一个非空树中,有如下特点。 1.有且仅有一个特定的称为根的节点…

数字IPO:企业增长的新引擎

数字IPO作为一种新型融资方式,可以被视为企业增长的重要加速器。以下是数字IPO如何促进企业增长的几个关键方面: 1.低成本融资与知名度提升:相较于传统的借贷融资方式,数字IPO为企业提供了低成本的资金来源。同时,上市…

神经网络--反向传播算法推导

神经网络–反向传播算法推导 文章目录 神经网络--反向传播算法推导概述神经网络模型反向传导算法 概述 以监督学习为例,假设我们有训练样本集 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)),那么神经网络算法能提供一种复杂且非线性的假设模型 …

MySQL与Redis缓存一致性的实现与挑战

缓存是提高应用性能的重要手段之一,而 MySQL 和 Redis 是两种常用的数据存储和缓存技术。在许多应用中,常常将 Redis 用作缓存层,以加速对数据的访问。然而,在使用 MySQL 和 Redis 组合时,保持缓存与数据库之间的一致性…

【MATLAB源码-第54期】基于白鲸优化算法(WOA)和遗传算法(GA)的栅格地图路径规划最短路径和适应度曲线对比。

操作环境: MATLAB 2022a 1、算法描述 1.白鲸优化算法(WOA): 白鲸优化算法是一种受白鲸捕食行为启发的优化算法。该算法模拟了白鲸群体捕食的策略和行为,用以寻找问题的最优解。其基本思想主要包括以下几点&#xff…

FMEA赋能可穿戴设备:打造安全可靠的未来科技新宠!

在科技日新月异的今天,可穿戴设备已成为我们生活中不可或缺的一部分。它们以其便携性、智能化和个性化的特点,深受消费者喜爱。然而,随着可穿戴设备市场的快速扩张,其安全性和可靠性问题也日益凸显。为了确保产品质量,…

QT常量中有换行符解决方法--使用中文显示乱码或者编译报错

QT6.3常量中有换行符 int ret2QMessageBox::information(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit(("确认启动设备吗?")),QMessageBox::Yes,QMessageBox::No); 确保显示正常,建议每次使用时,中文的前后加一个空…

从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部

本文为从零开始写 Docker 系列第十一篇,实现类似 docker exec 的功能,使得我们能够进入到指定容器内部。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: 核心原理&…

在线音乐网站的设计与实现

在线音乐网站的设计与实现 摘 要 在社会和互联网的快速发展中,音乐在人们生活中也产生着很大的作用。音乐可以使我们紧张的神经得到放松,有助于开启我们的智慧,可以辅助治疗,达到药物无法达到的效果,所以利用现代科学…

优秀Burp插件 提取JS、HTML中URL插件

Burp Js Url Finder 攻防演练过程中,我们通常会用浏览器访问一些资产,但很多接口/敏感信息隐匿在html、JS文件中,通过该Burp插件我们可以: 1、发现通过某接口可以进行未授权/越权获取到所有的账号密码 2、发现通过某接口可以枚举用…

STM32的GPIO端口的八种模式解析

目录 STM32的GPIO端口的八种模式解析 一、上拉输入模式 二、下拉输入模式 三、浮空输入模式 四、模拟输入模式 五、推挽输出模式 六、开漏输出模式 七、复用推挽输出模式 八、复用开漏输出模式 STM32的GPIO端口的八种模式解析 在学习STM32的过程中,GPIO端口…

【YUV】YUV图像全面详解(一)——格式详解

文章目录 一、前言二、YUV 介绍三、YUV 优点四、YUV 采样格式五、YUV 存储格式六、具体分类详解 一、前言 视频采集芯片输出的码流一般都是 YUV 格式数据流,后续视频处理也是对 YUV 数据流进行编码和解析。所以,了解 YUV 数据流对做视频领域的人而言&am…

【web开发网页制作】html+css家乡长沙旅游网页制作(4页面附源码)

家乡长沙网页制作 涉及知识写在前面一、网页主题二、网页效果Page1、主页Page2、历史长沙Page3、著名人物Page4、留言区 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码HtmlCSS 五、源码获取5.1 获取方式 作者寄语 涉及知识 家乡长沙网页制作&#x…
最新文章