【事务】事务的特性、并行事务有什么问题、事务的隔离级别等重点知识汇总

news2024/11/24 23:51:41

目录

事务的四大特性

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

事务的隔离级别


事务的四大特性

原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:事务执行前后,数据处在一致的状态, (数据能够对的上)。在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

隔离性数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交、读提交、可重复读和串行化。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

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

在同时处理多个事务的时候,就可能出现 脏读、不可重复读、幻读 的问题

这三个现象的严重性排序如下:

脏读 > 不可重复读 > 幻读

脏读

如果一个事务「读到」了另一个「未提交事务修改过的数据」,就意味着发生了「脏读」现象。

举个栗子!

假设有 A 和 B 这两个事务同时在处理,事务 A 先开始从数据库中读取小林的余额数据,然后再执行更新操作,如果此时事务 A 还没有提交事务,而此时正好事务 B 也从数据库中读取小林的余额数据,那么事务 B 读取到的余额数据是刚才事务 A 更新后的数据,即使没有提交事务。

因为事务 A 是还没提交事务的,也就是它随时可能发生回滚操作,如果在上面这种情况事务 A 发生了回滚,那么事务 B 刚才得到的数据就是过期的数据,这种现象就被称为脏读。

不可重复读

一个事务内多次读取同一个数据,如果出现前后两次读到的数据不一样的情况,就意味着发生了「不可重复读」现象。

举个栗子!

假设有 A 和 B 这两个事务同时在处理,事务 A 先开始从数据库中读取小林的余额数据,然后继续执行代码逻辑处理,在这过程中如果事务 B 更新了这条数据,并提交了事务,那么当事务 A 再次读取该数据时,就会发现前后两次读到的数据是不一致的,这种现象就被称为不可重复读。

幻读

在一个事务内多次查询某个符合查询条件的「记录数量」,如果出现前后两次查询到的记录数量不一样的情况,就意味着发生了「幻读」现象。

举个栗子!

假设有 A 和 B 这两个事务同时在处理,事务 A 先开始从数据库查询账户余额大于 100 万的记录,发现共有 5 条,然后事务 B 也按相同的搜索条件也是查询出了 5 条记录。

接下来,事务 A 插入了一条余额超过 100 万的账号,并提交了事务,此时数据库超过 100 万余额的账号个数就变为 6。

然后事务 B 再次查询账户余额大于 100 万的记录,此时查询到的记录数量有 6 条,发现和前一次读到的记录数量不一样了,就感觉发生了幻觉一样,这种现象就被称为幻读。

事务的隔离级别

「脏读、不可重复读、幻读」的现象,这些现象会对事务的一致性产生不同程序的影响。

SQL 标准提出了四种隔离级别来规避这些现象隔离级别越高,性能效率就越低

  • 读未提交,指一个事务还没提交时,它做的变更就能被其他事务看到;
  • 读提交,指一个事务提交之后,它做的变更才能被其他事务看到;
  • 可重复读,指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别
  • 串行化;会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;

按隔离级别高低排序如下:

串行化 > 可重复读 > 读已提交 > 读未提交

针对不同的隔离级别,并发事务时可能发生的现象也会不同。

也就是说:

  • 在「读未提交」隔离级别下,可能发生脏读、不可重复读和幻读现象;
  • 在「读提交」隔离级别下,可能发生不可重复读和幻读现象,但是不可能发生脏读现象;
  • 在「可重复读」隔离级别下,可能发生幻读现象,但是不可能脏读和不可重复读现象;
  • 在「串行化」👇隔离级别下,脏读、不可重复读和幻读现象都不可能会发生。

对于幻读现象,不建议将隔离级别升级为串行化,因为这会导致数据库并发时性能很差。MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读现象(并不是完全解决了)),解决的方案有两种:

针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。

针对当前读(select ... for update 等语句),是通过 next-key lock(记录锁+间隙锁)方式解决了幻读,因为当执行 select ... for update 语句的时候,会加上 next-key lock,如果有其他事务在 next-key lock 锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好了避免幻读问题。

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

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

相关文章

目标检测算法改进系列之Backbone替换为EfficientFormerV2

EfficientFormerV2 随着视觉Transformers(ViTs)在计算机视觉任务中的成功,最近的技术试图优化ViT的性能和复杂性,以实现在移动设备上的高效部署。研究人员提出了多种方法来加速注意力机制,改进低效设计,或…

如何测试接口?首先你得知道如何开发接口。

接口测试:接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。(来自某百科&a…

最全的QgraphicsEffect设置

在Qt中,QGraphicsEffect有四个子类,分别为QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect, and QGraphicsOpacityEffect,用于实现模糊、着色、阴影、透明度功能 下面就是对这四种功能以及效果做测试 1.QGraphicsB…

服务器搭建(TCP套接字)-libevent版(服务端)

Libevent 是一个开源的事件驱动库,用于开发高性能、并发的网络应用程序。它提供了跨平台的事件处理和网络编程功能,具有高性能、可扩展性和可移植性。下面详细讲解 Libevent 的主要组成部分和使用方法。 一、事件基础结构(event_base&#x…

26530-2011 地理标志产品 崂山绿茶

声明 本文是学习GB-T 26530-2011 地理标志产品 崂山绿茶. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了崂山绿茶地理标志产品的术语和定义、保护范围、分类、等级和实物标准样、要求、试 验方法、检验规则、标志、标签、包装、…

遥遥领先!探索Amazon CodeWhisperer魔力,你的私人AI编程助手!

本文目录 【前言】一、Amazon CodeWhisperer 功能概览1.1 强大的代码建议1.2 支持多种语言与IDE1.3 安全扫描 二、沉浸式体验使用Amazon CodeWhisperer实战开发代码2.1 Pycharm中快速导入Amazon CodeWhisperer2.2 使用CodeWhisperer快速构建Python代码2.3 Amazon CodeWhisperer…

26049-2010 银包铜粉 阅读笔记

声明 本文是学习GB-T 26049-2010 银包铜粉. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了银包铜粉的要求、试验方法、检验规则、标志、包装、运输、贮存、质量证明书以及合同 (或订货单)内容。 本标准适用于电子、机电、通讯…

汽车电子——产品标准规范汇总和梳理(信息安全)

文章目录 前言 一、整车 二、充电接口 三、诊断接口 四、远程接口 五、实施指南 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、整车 《GB/T 40861-2021 汽车信息安全通用技术要求》 《GB XXXXX—XXXX 汽车整车信息安全技术要求》 《GB/T 41871-2022 信息…

华为再放大招!联合伙伴发布AI新人类,助力场景化大模型商用落地

原创 | 文 BFT机器人 随着人工智能技术的不断发展,我们正迎来一个全新的智能时代。在这个时代里,人工智能将在各个领域发挥重要作用,为人类带来更智能、便捷和高效的生活体验。为了加速人工智能的商用落地,华为联合伙伴发布了系列…

kafka各版本消息介绍

kafka各版本消息介绍 V0 offset:分区中的偏移量message size:消息大小crc32(4B):crc32校验值。校验范围为magic至value之间。magic(1B):消息格式版本号,此版本的magic值为0。attributes (1B):消息的属性。总共占1个字节,低3 位表…

IDEA社区版,真香!

IDEA(IntelliJ IDEA)是众多 Java 开发者的首选。 商业版的昂贵 IDEA 商业版(IntelliJ IDEA Ultimate)功能非常强大,能够满足 Java 开发的所有需求,但其高昂的价格…… 此时只能感叹,不是不想用…

学习在windows环境下定时执行python脚本的方法

学习在windows环境下定时执行python脚本的方法 一、准备Python脚本二、创建定时任务1、打开【任务计划程序】2、打开【创建任务】窗口3、创建任务一一常规4、创建任务一一触发器5、创建任务一一操作程序或脚本:添加参数:起始于: 7、创建任务一…

CAD/CAM/CAE SDK 国庆大放送:Eyeshot 2023.X Crack

创建、探索或编辑 3D CAD 数据 开发您自己的(独立的)CAD/CAM/CAE 应用程序,请选择合适自己的版本::关注我,得知全球最新最全的组件动态,这个sdk我们会一直持续更新到最新,跟着我们,你…

GAT学习

文章目录 GAT注意力机制的定义图注意力层多头注意力机制GATConv层中forward函数步骤解析:1. 计算wh。wh:带权特征向量2. 计算注意力分数e3. 激活注意力分数e4. 由边的索引获取邻接矩阵5. 获得注意力分数矩阵。 attention[i][j]表示i j之间的注意力分数torch.where详…

苹果发布iOS 17.1首个beta版本,新增了这几个新功能!

苹果今日向iPhone/iPad用户推送了iOS/iPadOS17.1开发者预览版Beta版更新,iOS/iPadOS17.1Beta内部版本号为21B5045h。 iOS/iPadOS17.1Beta更新内容如下: 一:Apple Music“已喜爱”分类 用户可以在 iOS 17.1 的 Apple Music 中收藏歌曲、专辑…

优化邮箱体验!推荐替代方案:提升企业效率的选择

近年来,随着互联网技术的快速发展,电子邮件成为了企业沟通和协作的重要工具。而作为国内知名的企业邮箱服务提供商,网易企业邮箱凭借其稳定性、安全性和易用性,受到了广大企业的青睐。然而,随着市场竞争的加剧&#xf…

26532-2011 地理标志产品 慈溪杨梅

声明 本文是学习GB-T 26532-2011 地理标志产品 慈溪杨梅. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了慈溪杨梅的术语和定义、地理标志产品保护范围、要求、试验方法、检验规则及标志、 标签、包装、运输和贮存。 本标准适用…

基于java的银行风险预警系统的研究与实现

文章目录 导文摘要:前言:绪论:相关技术与方法介绍:系统分析:系统设计:系统实现:系统测试:总结与展望:导文 基于java的银行风险预警系统的研究与实现 本文基于Java开发了一款银行风险预警系统,旨在帮助银行有效管理风险并提前预警潜在风险。下面将对文中的各个部分进行…

微信小程序 课程签到系统

目录 前端页面展示主页面我的课程个人中心评论功能签到功能课程绑定超级管理员页面 前端文件结构文件结构app.json前端架构和开发工具前端项目地址 后端后端架构后端项目地址 注意事项 前端页面展示 主页面 登录页面: 账号是:用户名或者手机号 密码是&a…

【Elasticsearch】聚合查询(四)

Elasticsearch(简称为ES)是一个基于Lucene的开源搜索和分析引擎,提供了丰富的聚合查询功能。聚合查询指的是在搜索结果上执行分组、汇总和统计等操作,以便从大量数据中提取有用的信息和洞察。 这篇文章主要介绍检索相关的操作&…