MySQL事务的性情很“原子“,要么执行要么不执行

news2024/12/26 12:43:06

各位小伙伴有没遇到这个奇葩情况:业务逻辑对两个表加了事务操作,A表的存储引擎是InnoDB,B表的存储引擎却是MyISAM。事务要回滚时,麻烦就来了hhh,B表它回滚不了,那小伙伴打算要怎么处理~

🌱以【面试官面试】形式覆盖Java程序员所需掌握的Java核心知识、面试重点,本博客收录在我开源的《Java学习指南》中,会一直完善下去,希望收到大家的 ⭐ Star ⭐支持,这是我创作的最大动力: https://github.com/hdgaadd/JavaGetOffer

在这里插入图片描述

文章目录

    • 1. 事务的特性
    • 2. 事务隔离级别
      • 2.1 幻读
      • 2.1 处理幻读问题
      • 2.3 死锁问题
      • 2.4 隔离级别相关命令
    • 未完待续。。。

1. 事务的特性

面试官:事务的特性你说一说?

好的面试官。事务有四大特性。

  1. 原子性(atomicity):一个事务必须是一个不可分割的最小工作单元,整个事务所有的操作,要么成功提交,要么都失败回滚。
  2. 一致性(consistency):事务总是从一个一致性状态转换为另一个一致性状态。
  3. 隔离性(isolation):一个事务所作出的修改在还没有提交之前,对其他事务来说是不可见的。
  4. 持久性(durability):如果事务进行提交后,其所做的修改必须是永久性的,不会因为系统崩溃而丢失修改。

2. 事务隔离级别

面试官:隔离性有多种隔离级别,这个知道吧?

知道的,SQL标准定义了四种隔离级别,较低级别的隔离通常来说系统开销更低些。

  1. READ UNCOMMITTED(未提交读):事务的修改,即使没有提交,对其他事务来说也是可见的。这是最低级别的事务隔离,企业生产中很少使用到。
  2. READ COMMITTED(提交读):事务在未提交前,所做的修改对其他事务是不可见的。这个隔离级别也称为不可重复读,主要是因为两次重复的数据读取,可能会产生两种完全不同的结果。
  3. REPEATABLE READ(可重复读):这个事务隔离级别保证了一个事务多次读取都是同样的结果,能够解决前面两个隔离级别可能产生的不可重复读问题。另外可重复读是MySQL默认的事务隔离级别。
  4. SERIALIZABLE(可串行化):该隔离级别会强制事务串行执行,同时对读取的每一行数据都加上锁,来。通过这种方式可以解决幻读的事务问题,不过可能导致锁竞争问题和大量的SQL超时。

2.1 幻读

面试官:幻读是什么问题?还有其他事务问题吗?

并发事务带来的问题主要有四种,可以用上面我们谈到的事务隔离级别来处理,我都说下吧。

  1. 脏读:一个事务读取到另一个事务未提交的数据。

  2. 不可重复读:一个事务多次读取同一数据,另一个事务修改了该数据,导致第一个事务第二次读取数据发现和第一次读取的数据不一致

  3. 幻读:一个事务多次读取同一数据,另一个事务给这些数据插入删除了某些内容,导致第一个事务数据的数量发生改变。

  4. 丢失修改:一个事务修改了某个数据,另一个事务与其读取同一数据且原始值都相同,另一个事务修改数据后提交,导致第一个事务的修改操作丢失。

2.1 处理幻读问题

面试官:那幻读要怎么解决?

可以采用我提到的SERIALIZABLE(可串行化)隔离级别来解决幻读,事务按顺序执行,也就不会有幻读问题。

MySQL也提供了其他方法来处理幻读问题。

  1. 设置间隙锁,在两个索引值之间的数据进行加锁,可以杜绝其他事务在这个范围内对数据数量的影响。

  2. next-key锁就是间隙锁和行锁的组合,通过间隙锁锁住区间值、行锁锁住行本身

2.3 死锁问题

面试官:事务加锁会导致死锁,要怎么处理?

是这样的,死锁是因为多个事务互相占用对方请求的资源导致的现象,要打破这个问题需要回滚其中一个事务,这样另一个事务就能获得请求资源了,而回滚的事务只需要重新执行即可。

InnoDB引擎目前处理死锁的方法是通过持有行级排他锁的数量来判断,持有最少行级排他锁的事务会进行回滚。

2.4 隔离级别相关命令

面试官:有去看看你们数据库用的什么隔离级别吗?

有的,MySQL默认隔离级别是可重复读,企业生产一般也是用的这个隔离级别。

查看隔离级别的指令:

select @@tx_isolation

设置隔离级别为可重复读的指令:

set session transaction isolation level repeatable read

未完待续。。。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

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

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

相关文章

C#创建随机更换背景图片的窗体的方法:创建特殊窗体

目录 一、涉及到的知识点 1.图片资源管理器设计Resources.Designer.cs 2.把图片集按Random.Next方法随机化 3.BackgroundImage属性 二、实例设计 1. Resources.Designer.cs 2.Form1.Designer.cs 3.Form1.cs 4.生成效果 很多时候,我们需要每次打开窗体时能够…

如何创建二级域名并解析到服务器

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

【图像分割】光流生成标签(matlab)

文章目录 1. 框架2. opticalFlow_label3. 光流1. 框架 2. opticalFlow_label close all; clear; clc; % 使用光流进行标签的生成 %% 视频帧的读取 npy_data = readNPY(train.npy);%% 提取标签的坐标 first_label = squeeze(npy_data(2,1,:,:)); h = fspecial("gaussian&q…

TCP/IP协议—MQTT

TCP/IP协议—MQTT MQTT协议MQTT协议特点MQTT通信流程MQTT协议概念 MQTT报文固定报头可变报头有效载荷 MQTT协议 消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)是一个基于客户端-服务器的消息发布/订阅传输协议。它的设计思想…

HalconLen5-定位特征步步逼近

read_image(Image, C:/Users/86173/Desktop/test/2.png) get_image_size(Image, Width, Height)dev_close_window() dev_open_window(0, 0, Width, Height, black, WindowHandle)dev_display(Image)threshold(Image, Region, 128, 255) //阈值处理connection(Region, Connected…

人事管理软件全解析:高效团队管理的必备利器

本文为您详细介绍六款备受推崇的人力资源管理系统有:Zoho People、SAP SuccessFactors、Workday、Zenefits、BambooHR、TalentSoft。 一、Zoho People Zoho People 是一款全球领先的人事管理软件,以其全面的功能覆盖、出色的用户体验及高度的定制化能力…

02_Fixture定位,Caliper卡尺工具,几何学工具

Fixture定位工具 需求: 测量工件的尺寸 使用Caliper(卡尺)工具 这个时候需要借助Fixture工具 VisionPro中的图像空间 “” 图像的当前空间,即CogImage中的“SelectedSpaceName”表示的名字空间 “#” 像素空间,即坐标原点为图片左上角的坐标空间&am…

【模板自取】项目管理必会的思维分析工具之5W2H分析法

5W2H法是二战中美国陆军兵器修理部首创。简单、方便,易于理解、使用,广泛用于项目管理和思维分析等活动终,对于决策和执行性的活动措施也非常有帮助,也有助于弥补考虑问题的疏漏。产品管理、项目管理中,5W2H法也广泛应…

原子的内部结构

原子非常神奇,花时间思考它是非常有价值的。尽管传统的太阳系示意图存在致命的缺点,但我们还是可以局部应用于原子。 首先,原子与太阳系具有相似性一原子的中心质量大,外部质量小。我们用最简单的氢原子做分析,氢原子…

工作流JBPM系统数据库表介绍

文章目录 ☃️4.1 建表☃️4.2 数据库逻辑关系4.2.1 资源库与运行时的表4.2.2 历史数据表 ☃️4.3 表结构☃️4.4 流程操作与数表交互说明 ☃️4.1 建表 该系统自带18张表,用于支撑该系统的逻辑与流程业务; 建表语句如下: create database…

ROS实现无人驾驶控制算法(一)——pure pursuit

引言 对于导航系统来说,在规划好全局路径后,使机器人根据路径行驶这部分被称为轨迹跟踪。轨迹跟踪主要分为两类:基于几何追踪的方法和基于模型预测的方法。而pure pursuit算法就是最基本的基于几何的控制算法,因其鲁棒性高&#…

bonding原理分析和问题排查

bonding原理 发送端: 使用网卡bond3模式(广播模式BOND_MODE_BROADCAST)将报文从两个网卡同时发出,无需修改报文。 接收端: 根据发送节点时间的链路通断状态,接收端设置一条线路为活动线,另一条…

yolov7模型输出层预测方法解读

本文从代码的角度分析模型训练阶段输出层的预测包括以下几个方面: 标注数据(下文统称targets)的正样本分配策略,代码实现位于find_3_positive。候选框的生成,会介绍输出层的预测值、GT、grid、 anchor之间的联系损失函…

操作系统-一个学习能力的新高度

目录 一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结 一、目标 通过考试,当然这是眼前目标;通过对知识的学习,补上在计算机中那些透明的东西,从而让知识可以按照逻辑一层一层的构建知识大厦&a…

鸿蒙入门07-Blank组件

空白填充组件 在容器 主轴方向 上 空白填充组件具有自动填充空余部分的能力 注意 : 仅在父组件为 Row 或者 Column 的时候有效 注意 : 不能使用通用属性修饰 参数 参数名 参数类型 是否必填 默认值 参数描述 min number | string 否 …

就业班 第三阶段(nginx) 2401--4.17 day1 nginx1

负载均衡集群 1、集群是什么? 1 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。 …

【python】描述性统计计算偏斜度和峭度

文章目录 1.编写计算偏斜度和峭度的函数。并用自己编写的函数计算课本23页的习题1.5数据的偏斜度和峭度。2.从1.5数据中随机抽取2个容量为20的样本,分别计算它们的平均数和标准差3.请绘制给定数据的频率分布直方图,计算数据的均值、标准差、偏斜度和峭度…

Linux LVM 逻辑卷管理

Logical Volume Manager,逻辑卷管理 能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高磁盘管理的灵活性/boot分区用于存放引导文件,不能基于LVM创建 三大概念: 物理卷PV基于硬盘或分区设备创建而来,生成N多…

抖音小店类目怎么选?新手开店这几个类目别碰!

大家好,我是电商笨笨熊 刚进入抖音小店,一定不要着急选品,而是先选择适合自己的类目。 类目决定抖店未来的发展方向,类目不对,努力白费! 今天我们就来聊聊新手做抖店该如何正确挑选合适的类目。 新手进入…

微信投票活动制作步骤是什么

随着社交媒体的不断发展,微信已成为人们生活中不可或缺的一部分。而微信投票活动,作为一种新颖、有趣的互动方式,正逐渐受到越来越多企业和个人的青睐。那么,如何制作一场成功的微信投票活动呢?今天,就让我…