当前位置: 首页 > news >正文

【MySQL】mysql中的事务

目录

  • 1、背景
  • 2、事务的特性
  • 3、事务之间的几种错误
    • 【1】脏读
    • 【2】不可重复读
    • 【3】幻读
  • 4、事务中的隔离级别
  • 5、总结

1、背景

事务是存储引擎层面实现的,有的引擎支持事务,有的引擎不支持事务,我们常用的引擎InnoDB就支持事务,本文大概讲解一下事务的特性,后续再讲解事务的MVCC(多版本并发控制)如何实现的。

2、事务的特性

事务的特性满足ACID,A(Atomicity):原子性、C(Consistency):一致性、I(Isolation):隔离性、D(Durability):持久性。

1、原子性:一组操作要么全部成功要么全部失败。
2、一致性:数据库从一个有效的状态变为另一个有效的状态。
3、隔离性:事务间的影响程度,四种级别分别为读未提交、读已提交、可重复读、串行化。
4、持久性:事务提交之后就会永久生效,也就是将数据写入磁盘发生异常能恢复。

3、事务之间的几种错误

假设有张表如下:

CREATE TABLE student
(id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL DEFAULT '' COMMENT '姓名'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

向其中插入一条数据,后面讲的几种错误都以这条记录作为初始条件:

mysql [xxx]> INSERT INTO student (name) VALUES ('张三');
Query OK, 1 row affected (0.001 sec)mysql [xxx]> SELECT * from student;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
+----+--------+
1 row in set (0.000 sec)

【1】脏读

事务A读取到了事务B未提交修改之后的数据,事务B发生了回滚,此时事务A读取到的数据就是"脏数据",这就叫脏读,举个例子理解:

时间顺序事务A事务B
t1开始事务开始事务
t2UPDATE student SET name = ‘李四’ WHERE id = 1;
[将"张三"更新为"李四"]
t3SELECT name FROM student WHRER id =1;
[此时读取到的name为"李四"]
t4提交事务
t5回滚事务
[此时name的值变为"张三"]

数据库中原本的name值为"张三",t2时刻事务B将name更新为"李四",t3时刻事务A读取到name为"李四",t4时刻事务A提交,t5时刻事务B发送回滚,此时name的值变为"张三",但是事务A读取到的name还是为"李四",这就是读到了一个无效的数据,叫做"脏读"。

【2】不可重复读

事务A只能读取已提交事务的结果,多个已提交事务结果的不同,事务A就可能读到不同的结果,这就叫不可重复读,示例如下:

时间顺序事务A事务B事务C
t1开始事务开始事务开始事务
t2SELECT name FROM student WHERE id = 1;
[此时读取到的name为"张三"]
t3UPDATE student SET name = ‘李四’ WHERE id =1;
[将"张三"更新为"李四"]
t4提交事务
[此时name为"李四"]
t5SELECT name FROM student WHERE id = 1;
[此时读取到的name为"李四"]
t6UPDATE student SET name= ‘王五’ WHERE id =1;
[将"李四"更新为"王五"]
t7提交事务
[此时name为"王五"]
t8SELECT name FROM student WHERE id = 1;
[此时读取到的name为"王五"]
t9提交事务

上面t2、t5、t8时刻事务A读取的name分别为:“张三”、“李四”、“王五”。一个事务三次读取结果都不一样,这就叫"不可重复读"。

【3】幻读

事务A两次根据某个条件查询两次的结果由于中途事务B进行了插入导致两次查询结果不一致,这就叫幻读。示例如下:

时间顺序事务A事务B
t1开始事务开始事务
t2SELECT name FROM student WHERE id < 10;
[查出来的只有"张三"]
t3INSERT INTO student (name) VALUES (‘李四’);
[新插入一条name为"李四"的记录]
t4提交事务
[此时表中有name为"张三"、"李四"两条记录]
t5SELECT name FROM student WHERE id < 10;
[查出来的有"张三"、“李四”]
t6提交事务

事务A种t2时刻和t3时刻查询条件相同,但t3时刻多出来一条记录,这就叫做"幻读"。

4、事务中的隔离级别

事务中有4种隔离级别

READ UNCOMMITTED未提交读
READ COMMITTED已提交读
REPEATABLE READ可重复读
SERIALIZABLE可串行化

查看mysql中设置的隔离级别如下:

mysql [xxx]> SELECT @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.016 sec)

每个隔离级别对应事务之间的问题如下:

脏读不可重复读幻读
未提交读yesyesyes
已提交读noyesyes
可重复读nonoyes
可串行化nonono

未提交读每次都会读取最新的结果;已提交读每次读取的都是已提交事务的结果;可重复读会对所读的行进行加锁,保证读取行的时候不会被其它事务修改;虽然可串行化事务之间不会有并发问题,但是执行效率也是最低的,因为要给每一行去加锁。

5、总结

本文对事务的特性和事务之间的问题有了个大概的认知,后面会再细节讲解事务的回滚机制和MVCC实现原理。

相关文章:

【MySQL】mysql中的事务

目录 1、背景2、事务的特性3、事务之间的几种错误【1】脏读【2】不可重复读【3】幻读 4、事务中的隔离级别5、总结 1、背景 事务是存储引擎层面实现的&#xff0c;有的引擎支持事务&#xff0c;有的引擎不支持事务&#xff0c;我们常用的引擎InnoDB就支持事务&#xff0c;本文…...

大语言模型(LLM)与智能机器人的应用分析

系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…...

Inno Setup 学习笔记(一)

前言 最近想把自己写的Windows端的软件打包成安装程序exe&#xff0c;又觉得自带的界面太丑了&#xff0c;想自己完全做一个新的页面 网上找到的只有基础教程&#xff0c;记录一下进阶学习过程 生命周期 按照Vue的说法叫生命周期&#xff0c;Inno Setup中叫 Pascal 脚本: 事…...

从阿里云EDM到美团云:典型微服务治理平台的实战经验分享

目录 一. 阿里云 EDM&#xff08;Enterprise Distributed Application Service&#xff09; 二. 腾讯云 TSF&#xff08;Tencent Service Framework&#xff09; 三. 华为云 FusionStage 四. 京东云 JDC&#xff08;JD Cloud Microservice Platform&#xff09; 五. 百度智…...

【接口自动化测试】一文从3000字从0到1详解接口测试用例设计

接口自动化测试是软件测试中的一种重要手段&#xff0c;它能有效提高测试效率和测试覆盖率。在进行接口自动化测试之前&#xff0c;首先需要进行接口测试用例的设计。本文将从0到1详细且规范的介绍接口测试用例设计的过程&#xff0c;帮助读者快速掌握这一技能。 一、了解接口…...

反向代理-缓存篇

文章目录 强缓存一、Expires(http1.0 规范)二、cache-control(http1.1 出现的 header 信息)Cache-Control 的常用选项Cache-Control 常用选项的选择三、弊端协商缓存一、ETag二、If-None-Match三、Last-modified四、If-Modified-Since浏览器的三种刷新方式静态资源部署策略…...

【伪代码】数据结构-期末复习 线性表

目录 例1 矩阵相乘 线性表 2.1 线性表的类型定义 例2-1 求并集 LALA∪LB 例2-2 有序表归并 2. 2 线性表的顺序表示和实现 1&#xff0e;构造空表 2&#xff0e;插入 3&#xff0e;删除 4&#xff0e;定位 顺序表的优点&#xff1a; 顺序表的缺点&#xff1a; 例…...

JavaWeb学习、过滤器、ajax异步请求、json、jquery-api文档

一、过滤器&#xff1a; 按照过滤规则筛选出想要的资源。 为什么使用过滤器&#xff1f; 1. 很多地方都需要判断是否登录。如果我们在每个资源出进行判断&#xff0c;非常麻烦。我们可以使用过滤器在访问这些资源前进行判断。 &#xff08;这样就不用在主界面&#xff0c;修改…...

深入探索 JVM:原理、机制与实战

一、JVM 概述 JVM&#xff08;Java Virtual Machine&#xff09;是 Java 程序运行的核心组件&#xff0c;它提供了一个独立于硬件和操作系统的执行环境&#xff0c;使得 Java 程序能够在不同平台上具有跨平台的特性。 JVM 主要由以下几部分组成&#xff1a; 类装载器&#xf…...

JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))

目录 一、Servlet详细。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 &#xff08;1&#xff09;实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…...

支付宝租赁小程序助力便捷生活新方式

内容概要 支付宝租赁小程序为现代人带来了许多惊喜&#xff0c;它不仅仅是一个简单的租赁平台&#xff0c;更是生活中不可或缺的好帮手。想象一下&#xff0c;无论你缺少什么&#xff0c;从工具到家居用品&#xff0c;只需轻轻一点&#xff0c;便能轻松找到需要的物品。这个小…...

Linux-ubuntu环境配置

一&#xff0c;安装VWware&#xff0c;里面导入镜像文件 这些都是文件夹里面有的&#xff0c;然后对着正点原子视频安装就行&#xff0c;虚拟机的破解码&#xff0c;去百度搜一个能用就行&#xff0c;中间遇见俩问题。①乌班图里面不能上网&#xff0c;②插入U盘后&#xff0c;…...

深入解析下oracle的number底层存储格式

oracle数据库中&#xff0c;number数据类型用来存储数值数据&#xff0c;它既可以存储负数数值&#xff0c;也可以存储正数数值。相对于其他类型数据&#xff0c;number格式的数据底层存储格式要复杂得多。今天我们就详细探究下oracle的number底层存储格式。 一、环境搭建 1.…...

nginx代理rabbitmq和配置 Nginx 代理达梦数据库

在 Nginx 中使用 stream 模块进行 TCP 代理时&#xff0c;可以将 TCP 或 UDP 流量转发到指定的后端服务器。你给出的配置是一个用于代理 RabbitMQ 的示例&#xff0c;具体是在 TCP 层上代理 5672 端口的流量。 只能在nginx.conf配置上代理 stream {# 定义 upstream&#xff0c…...

汉语唤醒词的模糊判断(Python)

汉语唤醒词的模糊判断【Python】 说明安装库代码Demo其他 说明 这是一个简单的汉语模糊唤醒词的判断器&#xff0c;汉语发音中前后舌以及声母韵母的区别&#xff0c;如果进行精准判断&#xff0c;很容易误判。需要一个模糊判断的逻辑! 安装库 pip install pypinyin代码Demo …...

Redis篇-2--原理篇1--I/O多路复用机制(5种I/O模型,I/O多路复用)

I/O多路复用机制&#xff1a; Redis 是通过I/O多路复用机制来管理大量客户端连接。这使得redis可以实现通过单线程来处理多个客户端连接的请求&#xff0c;避免了为每个客户端创建独立的线程&#xff0c;从而减少了上下文切换的开销&#xff0c;提高了系统的并发性和性能。 理解…...

Knowledge Graph Studio:让知识图谱构建更简单、更智能

一、前言 上周和研究院的同事讨论 2025 年大模型产品规划时&#xff0c;让我产生了一些疑惑和不解&#xff0c;因为从大家交流的规划方向来看&#xff0c;更多的还是集中在Prompt提示词工程&#xff08;包括提示词的管理、测试、评估、调优&#xff09;这一块规划的确实挺细&a…...

vue 中实现音视频播放进度条(可拖拽,满足常见开发需求)

由于开发需要&#xff0c;作者封装了一个音视频播放进度条的组件&#xff0c;支持 vue2 及 vue3 &#xff0c;有需要的朋友后台私信作者获取组件源码哦&#xff08;工作日每天都在线&#xff09;&#xff0c;下面是对该款组件的介绍。 组件默认样式&#x1f447;&#xff08;组…...

[免费]SpringBoot+Vue企业OA自动化办公管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue企业OA自动化办公管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue企业OA自动化办公管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入…...

笔记:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景

一、目的&#xff1a;在WPF中BitmapSource都有哪些派生类&#xff0c;他们主要功能&#xff0c;使用方法&#xff0c;使用场景 BitmapSource 是 WPF 中图像处理的基类&#xff0c;提供了许多派生类来处理不同类型的图像源。以下是一些常见的 BitmapSource 派生类、它们的主要功…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...