MySQL的四种事务隔离级别

news/2025/2/25 0:46:08/文章来源:https://www.cnblogs.com/gqfx/p/18735255

一.MySQL四大隔离级别
事务隔离级别
1.读未提交 (Read Uncommitted)
允许一个事务读取另一个事务未提交的数据。
2.读已提交 (Read Committed)
一个事务只能读取另一个事务已经提交的数据。
3.可重复读 (Repeatable Read)
保证在一个事务内多次读取同一数据时,其结果是一致的。
这是 MySQL 默认的隔离级别。
4.串行化 (Serializable)
强制事务串行执行,避免所有并发问题。

隔离水平
1.读未提交 (Read Uncommitted)
隔离水平:最低
特性:允许一个事务读取另一个事务未提交的数据。
2.读已提交 (Read Committed)
隔离水平:较低
特性:一个事务只能读取另一个事务已经提交的数据。
3.可重复读 (Repeatable Read)
隔离水平:较高
特性:保证在一个事务内多次读取同一数据时,其结果是一致的。
默认设置:这是 MySQL 默认的隔离级别。
4.串行化 (Serializable)
隔离水平:最高
特性:强制事务串行执行,避免所有并发问题。

产生问题

  1. 读未提交 (Read Uncommitted)
    脏读:一个事务读取了另一个事务未提交的数据,如果之后该事务被回滚,则会导致读取的数据无效。
    幻读:一个事务读取了一组数据后,另一个事务插入了一些新的数据项,当第一个事务再次读取相同的数据集时,会发现多了未曾见过的行。
    不可重复读:一个事务读取了一条数据后,另一个事务修改了这条数据,当第一个事务再次读取时,得到的数据不同。
  2. 读已提交 (Read Committed)
    不可重复读:一个事务读取了一条数据后,另一个事务修改并提交了这条数据,当第一个事务再次读取时,得到的数据不同。
    幻读:一个事务读取了一组数据后,另一个事务插入了一些新的数据项并提交,当第一个事务再次读取相同的数据集时,会发现多了未曾见过的行。
  3. 可重复读 (Repeatable Read)
    幻读:一个事务读取了一组数据后,另一个事务插入了一些新的数据项并提交,当第一个事务再次读取相同的数据集时,会发现多了未曾见过的行。
    默认设置:这是 MySQL 默认的隔离级别。
  4. 串行化 (Serializable)
    性能影响:由于所有事务必须串行执行,可能会导致性能下降。
    隔离级别 脏读 幻读 不可重复度
    读未提交 会 会 会
    读已提交 不会 会 会
    可重复读 不会 会 不会
    串行化 不会 不会 不会
    🎯名词解释

脏读
定义:一个事务能够读取到另一个事务尚未提交的数据。
🌰现实例子:想象一下你在银行排队等待办理业务,而你的朋友正在柜台办理转账。你的朋友还没有完成转账操作,也就是说这笔钱还没有真正从他的账户转到你的账户。但是,你却提前看到了自己的账户余额增加了这笔钱。如果这时你的朋友决定取消转账,那么你看到的余额增加就是“脏”的,因为你实际上并没有收到这笔钱。

幻读
定义:幻读是指在一个事务内多次执行相同的查询语句,第二次或以后的查询返回了第一次查询时不存在的额外记录。
🌰现实例子:想象你在一个图书馆查找书籍,第一次查询时找到了10本书关于编程的书。你离开图书馆去喝了杯咖啡,回来后再次查询,发现现在有12本关于编程的书,因为在这段时间里有人捐赠了两本新书。这就像是在同一个事务中两次查询相同条件下的图书数量,但得到的数量不同。

不可重复读
定义:不可重复读是指在一个事务内多次执行相同的查询语句,第二次或以后的查询返回的结果与第一次查询的结果不同。
🌰现实例子:假设你在网上购物,第一次查看某商品的价格是100元。然后你去干别的事情,比如接了个电话。当你再次查看同一件商品的价格时,发现它变成了90元,因为在这段时间里商家做了促销活动降低了价格。这就像是在一个事务中两次查询同一商品的价格,但得到了不同的结果。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

持续分享干货!清华出品《DeepSeek如何赋能职场》PDF可下载

🔥今天分享的是清华出品《DeepSeek如何赋能职场》的PPT,内容涵盖了DeepSeek运行模式的讲解,如何向DeepSeek提问,如何构建提示词,结合实际多个实际应用场景,详细的介绍了DeepSeek结合其他多模态AI模型持续赋能职场的方法。提示词框架如何使用DeepSeek制作可视化图表如何使…

「跟着渡一学前端」并发请求实现

学习资源 并发请求 【渡一教育】 完整代码 function concurRequest(urls, maxNum) {if (urls.length === 0) {return Promise.resolve([]);}return new Promise((resolve) => {let nextIndex = 0;let finishCount = 0;const result = [];async function _request() {if (nex…

软工作业1

作业相关信息这个作业属于哪个课程 软件工程 这个作业要求在哪里 自我介绍+软工5问 这个作业的目标 自我介绍,了解软件工程基本概念个人介绍 Im YiLaiL YiLaiL/YiLaiL is a ✨ special ✨ repository because its README.md (this file) appears on your GitHub profile.🔭 …

EmEdit设置缓存目录临时文件夹

前言全局说明一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737 EmEditor Professional (64-bit) Version 17.2.4二、打开大文本控制器三、点击右边大文本控制器上 自定义四、选择比较大的磁盘空间作为缓存空间免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他…

谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇

上一篇咱们了解了 ES 7.10 相较于 ES 6.8 新增的字段类型,这一篇我们继续了解新增的查询方法。 Interval 间隔查询: 功能介绍 Interval 查询,词项间距查询,可以根据匹配词项的顺序、间距和接近度对文档进行排名。主要解决的查询场景“创建一个多搜索词匹配的查询,同时保留…

【蓝牙小程序】在微信小程序中使用 ECharts

echarts-for-weixin 项目提供了一个小程序组件,用这种方式可以方便地使用 ECharts。 使用方式下载该项目 如有必要,将 ec-canvas 目录下的 echarts.js 替换为最新版的 ECharts。如果希望减小包体积大小,可以使用自定义构建生成并替换 echarts.js pages 目录下是使用的示例文…

Virtual Box设置双网卡

一、硬件 1.为虚拟机添加网卡2.配置网卡二、软件 3.获取mac地址 命令:ip link [root@vbox network-scripts]# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd…

简单逆向Java程序

前置 来源 这个程序是我同学编写的一个学生分数管理系统,我将对这个已经编译的程序进行测试、逆向,找出其中的问题,并进行改进。 运行环境macOS 15.4 IntelliJ IDEA 2024.2.3 OpenJDK 23.0.2 TomCat 11.0.4 Safari 15.4运行结果主要问题 在使用了这个程序之后,我发现了以下…

信息论概述

1 信息与消息 1.1 信息 1.1.1 信息的定义 信息是信息论中最基本、最重要的概念 香农信息的定义:信息是事物运动状态或存在方式的不确定描述 1.1.2 (香农)信息的度量样本空间:对于我们需要描述的事物中,事物可能存在不同的状态,即事物展现出来的多种状态。那么为了便于形容事…

JUC并发—12.ThreadLocal源码分析

大纲 1.ThreadLocal的特点介绍 2.ThreadLocal的使用案例 3.ThreadLocal的内部结构 4.ThreadLocal的核心方法源码 5.ThreadLocalMap的核心方法源码 6.ThreadLocalMap的原理总结1.ThreadLocal的特点介绍 (1)ThreadLocal的注释说明 (2)ThreadLocal的常用方法 (3)ThreadLocal的使用…

前端Vue创建

一、创建Vue项目二、导入idea 复制景区 三、设置main.js点击查看代码 import Vue from vue import App from ./App.vue import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import ./assets/golbal.css; import axios from axios; // 正确的模块…

朋友说喊搞个简单的微信对接的封装搞外包,不要那么多的方法拿来就用的的那种,来看看Simple.Wechat吧

朋友说喊搞个简单的微信对接的封装搞外包,不要那么多的方法拿来就用的的那种,来看看Simple.Wechat吧😂不知道大家有没有和我朋友一样,很多时候做外包总免不了去对接微信,最简单的微信用户信息获取、微信支付、微信模板消息发送,要是不熟悉总是要去找这个那个的包,但是人…