详解数据库的脏读、不可重复读和幻读

保姆级教程:用Fiddler+夜神模拟器搞定抖音App抓包(附SSL Pinning绕过实战) 本文提供了一套完整的移动端抓包解决方案,详细介绍了如何使用Fiddler和夜神模拟器进行抖音App抓包,并重点讲解了SSL Pinning绕过技术。通过Xposed框架和JustTrustMe模块的组合,实现高效抓包,适用于产品分析、竞品研究和安全测试等场景。 阅读详情

数据库的脏读、不可重复读和幻读分别是什么?

数据库的脏读、不可重复读和幻读分别是什么?

在这里插入图片描述

举例

脏读

假设有一个银行账户的余额记录,账户 ID 为 1。现在有两个事务,分别为事务 A 和事务 B。

  1. 事务 A:
BEGIN;
UPDATE account SET balance = balance - 100 WHERE id = 1;
  • 开始事务后,将账户余额减少 100 元,但此时还未提交。
  1. 事务 B:
BEGIN;
SELECT balance FROM account WHERE id = 1;
  • 在事务 A 修改后、提交前,事务 B 读取该账户余额。
  • 事务 B 读到了事务 A 尚未提交的减少 100 元后的余额,这就是“脏读”。
  1. 后续情况:
  • 如果事务 A 最终回滚,则事务 A 的修改不会被保存,而事务 B 已经读取到一个错误的、未最终确定的数据,导致数据不一致的问题。

不可重复读

还是假设有一个银行账户的余额记录,账户 ID 为 1,初始余额为 1000 元。现在有两个事务,分别为事务 A 和事务 B,说明不可重复读现象:

  1. 事务 A 开始并首次读取余额
BEGIN;
SELECT balance FROM account WHERE id = 1;
-- 返回结果为:1000

此时事务 A 读取了账户余额为 1000 元。

  1. 事务 B 修改余额
    在事务 A 仍未结束时,事务 B 开始并修改该账户余额,例如存入 500 元:
BEGIN;
UPDATE account SET balance = balance + 500 WHERE id = 1;
COMMIT;

事务 B 修改并提交后,账户余额变为 1500 元。

  1. 事务 A 再次读取余额
    事务 A 在之前读取后仍未提交,再次读取账户余额:
SELECT balance FROM account WHERE id = 1;
-- 返回结果为:1500

此时事务 A 得到了与第一次不同的余额,从 1000 元变为 1500 元,这就是不可重复读的现象。


幻读

假设有一个员工表 Employees,其中有个字段 department 表示员工所在的部门。两个事务 T1 和 T2 同时运行:

  1. 事务 T1 开始并执行查询:
SELECT * FROM Employees WHERE department = 'Sales';

此时返回满足条件的所有销售部门员工。

  1. 在 T1 还未提交之前,事务 T2 执行插入操作:
INSERT INTO Employees (name, department) VALUES ('张三', 'Sales');

T2 插入了一条新记录,其部门为 ‘Sales’,并提交了事务。

  1. 事务 T1 再次执行同样的查询:
SELECT * FROM Employees WHERE department = 'Sales';

这次返回的结果中,除了之前的记录外,还多了一条刚刚插入的新记录,即“张三”。

在这种情况下,由于 T2 在 T1 的事务过程中插入了新数据,导致 T1 第二次查询时看到的数据集(幻影数据)与第一次不一致,这就是幻读现象。

VS Code ESP-IDF无法找到源文件、头文件波浪线解决 背景:想要编译小智AI项目,可以正常编译。但是一些头文件,例如#include <nvs.h>等无法找到。 阅读详情

相关推荐

Codex Skill:AI编程助手的专项能力扩展与实战指南

在AI编程助手领域,Skill(技能)是一种标准化的能力扩展机制,它通过封装特定任务所需的指令、资源和脚本,解决AI模型在专项任务上的能力局限。其核心原理是将专业知识和工作流程模块化,让通用AI助手能够像领域专家一样执行复杂任务。从技术价值看,Skill不仅提升了代码生成的准确性,更重要的是实现了业务流程的自动化集成,如代码规范检查、API文档生成等具体场景。这种机制特别适用于需要结合内部工具链和特定业务逻辑的企业环境,能够显著提升开发效率和质量。通过安装PPT生成、SpringBoot项目创建等专项Ski

weixin_33672109的博客 411

脏读、不可重复读和幻影读的概念

1、脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。           2、不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事

qq_28052907的博客 4014

python sci sci-hub 爬论文

sci-hub 爬虫 后续加入对于时间的排序,下载最新文献 参考: https://www.guanjihuan.com/archives/6846 https://blog.csdn.net/czh2637750821/article/details/115508922

weixin_42783619的博客 3533

事物并发读写的可能:幻影读-不可重复读-脏读

伴随着事务的不同隔离等级,会出现不同的读取现象。ANSI/ISO 标准 SQL 92指出两个事务并发执行,一个事务读数据,另一个事务写数据时可能出现的三种情况。 幻影读(Phantom reads) 事务T1进行两次相同的查询,前后2次查询的结果由于事务T2插入了新数据产生了不同的结果。 T1        &nb...

扶摇升的IT博客 970

无人机避障——Mid360+Fast-lio感知建图+Ego-planner运动规划(胎教级教程)

本工作将 Mid360 激光雷达、Fastlio-SLAM 和 Ego-Planner 集成,实现无人机的环境感知、定位建图和运动规划(仿真过程)—— 胎教级教程。

weixin_45390670的博客 1万+

SpaceMesh Mining 教程

當參與Spacemesh的用戶在完成P盤工作後需要完成兩個部分工作:PoET+PoST,這兩部分均是在不同的規定時間完成,具體可參考後續的時間表。註意!只有PoET和PoST均完成的用戶才可以獲得收益。Spacemesh相關P盤教程:說明:1.Spacemesh每個紀元epoch周期為14天,在8月7日完成PoET的將在8月20日完成PoST,收益將在8月25日後發放(之後用戶收益將每隔14天發放一次) 後續PoET時間為8月7日+N14 **後續PoST時間為8月20日+N。

Yc Chan 的个人博客 1039

脏读幻读和不可重复读 数据库锁 隔离机制

一、脏读、不可重复读、幻读1、脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 例如: 张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。 与此同时, 事务B正在读取张三的工资,读取到张三的工资为8000。 随后, 事务A发生异常,而回滚了事务。张三的工资又回滚为5000。 最后, 事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读。2、不可重复读:是指在一个事务内,多

song854601134的博客 6万+

爬取中国空气质量在线监测分析平台

1.准备,爬取的链接地址 https://www.aqistudy.cn/html/city_detail.html 2.分析 a.当打开链接后,数据已经设置好了,说明里面大部分都是js通过ajax调用的, b.打开f12分析代码 通过捕获到的数据包,发现当前请求为ajax,携带着一个为d的参数且该请求携带的数据是加密过的,并且响应也是加密过的 c.这时候的问题就是...

Mr Right 6365

事物级别,不可重复读和幻读的区别

脏读: 原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),今天我们主要来理解一下事务的隔离性。 声明:MySQL专栏学习系列,基本上是本人学习极客时间《MySQL实战45讲》专栏内容的...

qq_35433593的博客 2万+

CVAT自动标注避坑指南:如何解决Nuclio工程创建失败和镜像拉取问题

本文是一份针对CVAT自动标注部署中常见问题的实战排障指南。文章深入剖析了Nuclio工程创建失败的根源,提供了网络配置、服务状态检查等系统性解决方案,并详细讲解了如何解决gcr.io等海外镜像拉取难题,帮助开发者顺利完成CVAT自动标注环境的搭建与部署。

weixin_29207533的博客 225

⭐⭐⭐全网最详细YOLOv8教程,从环境配置到自己训练,再到数据集的制作,包的各位⭐⭐⭐

问题原因:当你“pip install ultralytics” 时,torch和torchvision会作为它的依赖一起安装了,当执行“pip install torch torchvision torchaudio --index-url。”时,会卸载torch,然后再安装torch+cuda版本,但是不会自动卸载torchvision已有版本,然后再安装torchvision+cuda版本。🎉🎉🎉恭喜各位道友,已经可以训练模型了,现在就是制作自己的数据集,所谓申神通秘境,随心所欲,万物皆可识别也

weixin_74840239的博客 7484

MySQL如何解决幻读和不可重复度?

文章参考: https://juejin.im/post/5b8577c26fb9a01a143fe04e https://joonwhee.blog.csdn.net/article/details/106893197 http://blog.51cto.com/14344203/2402076 注意:探讨MySQL如何防止不可重复度和幻读问题之前,默认大家已经理解脏读、幻读、不可重复读的区别,以及数据库事务的3种隔离级别! 1. MySQL中的3种锁算法 首先了解下MySQL中的3种锁算法: .

兴趣使然的草帽路飞 1万+

利用Matlab高效处理Comsol仿真数据的可视化技巧

本文详细介绍了如何将Comsol仿真数据高效导入Matlab并进行专业可视化与后处理。核心内容包括正确的数据导出格式设置、三维矩阵重构方法、二维截面与三维体渲染技巧,以及基于Matlab的定量分析与批处理自动化流程,帮助工程师和科研人员深度挖掘仿真数据价值,提升工作效率。

weixin_29065791的博客 352

Java面试必备:数据库的脏读、不可重复读和幻读详解

在数据库管理系统中,事务的隔离级别是确保数据一致性和完整性的重要机制。不同的隔离级别可以防止不同的并发问题,其中最常见的三种问题是:**脏读(Dirty Read)**、**不可重复读(Non-Repeatable Read)**和**幻读(Phantom Read)**。本文将详细解释这三种现象,并通过流程图帮助读者更好地理解。

qq_58299462的博客 1869

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数据库事务隔离级别以及脏读、幻读和不可重复读问题详解

数据库事务隔离级别主要作用是实现事务工作期间,数据库操作读的隔离特性。在MySQL中,数据是以页为单位进行存储的(这里不展开讲了),所谓读的操作就是将数据页内数据加载(load)至内存的过程,数据库的隔离特性也就决定了读取数据页中相应数据行的能力的优先级,并且不同事务之间的数据页读操作相互隔离,可以简单理解为:一个事务在对数据页中数据行做更新操作时,在没有更新提交前,另一个事务此时是不能读取数据页中数据行内容的。

weixin_39778881的博客 1164

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数据库并发问题详解:脏读、不可重复读和幻读——事务隔离级别深度剖析

在多事务并发执行的数据库环境中,如果没有适当的隔离机制,会出现各种数据一致性问题。脏读、不可重复读、幻读是三种典型的并发异常现象。本文将深入剖析这三种问题的成因、表现以及不同事务隔离级别如何解决这些问题。脏读是指一个事务读取了另一个尚未提交的事务修改的数据。如果那个事务最终回滚,读取到的数据就是无效的"脏数据"。事务B数据库事务A事务B数据库事务Afill:#333;important;important;fill:none;修改但未提交使用了不存在的数据!造成数据错误1. 开始事务。

✨ 欢迎来到【Seal ^_^ 的CSDN博客】!✨ 1196

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数据库的脏读、不可重复读和幻读分别是什么?

都是多事务并发下产生的数据一致性问题,下面用通俗例子区分,事务A、事务B并发执行。

程序员夏洛的博客 329

面试冲刺 7.3 数据库的脏读、不可重复读和幻读分别是什么?

2503_92351106的博客 131

电商交易系统重要概念:什么是脏读、不可重复读、幻读?

数据库并发事务会产生三类数据一致性问题:脏读(读取未提交可能回滚的数据)、不可重复读(同一事务内两次读取同一行结果不同)、幻读(范围查询结果集行数变化)。脏读通过READ COMMITTED隔离级别解决,不可重复读通过REPEATABLE READ解决,幻读需要SERIALIZABLE隔离级别或MySQL的间隙锁机制。MySQL的InnoDB引擎在REPEATABLE READ级别下通过间隙锁可避免幻读。开发建议:关键业务使用REPEATABLE READ及以上隔离级别,范围查询加锁,建立合适索引和约束。三

Talbot3的笔记 772

数据库隔离级别与三个问题(脏读、不可重复读、幻读)

幻读发生在范围查询中,而不是单行查询。得到两行(id=1,2)。此时事务B 插入一条新记录 id=3,balance=300,并提交。事务A 再次执行相同的范围查询,得到三行(id=1,2,3),出现了“幻影行”。在标准的可重复读隔离级别下,MVCC 只保证已存在行的快照一致性,但无法阻止新行的插入,因为新行不在事务开始时的快照中,第二次查询时快照里本来没有这行,但新行在提交后是可见的(取决于快照的实现机制)。

qq_51991814的博客 720

事务隔离级别以及脏读、幻读、不可重复读

本文介绍了数据库事务隔离级别及其相关的三种读一致性问题:脏读、不可重复读和幻读。脏读指读取到未提交的数据,不可重复读是同一事务中多次读取同一数据结果不一致,幻读则是查询结果集发生变化。四种隔离级别(读未提交、读已提交、可重复读和串行化)分别对应不同的并发控制强度,级别越高越安全但性能越低。MySQL的InnoDB引擎默认使用可重复读级别,通过MVCC和间隙锁机制在保证一致性的同时兼顾性能。合理选择隔离级别需要在数据一致性和系统性能之间取得平衡。

杨夏同学的博客 356

什么是脏读,不可重复读,幻读?

摘要 本文介绍了数据库事务中的三种并发问题:脏读指事务读取到其他事务未提交的数据;不可重复读指同一事务内对同一数据的两次读取结果不一致;幻读则指同一事务内相同条件的两次查询返回的记录数量不一致。这三种现象反映了事务隔离性在不同程度上的破坏。

wuqingshun314159的博客 69

一文详解脏读、不可重复读、幻读

MySQL 是支持多事务并发执行的。否则来一个事务处理一个请求,处理一个人请求的时候,其它事务都等着,那估计都没人敢用MySQL作为数据库,因为用户体验太差,估计都要砸键盘了。 既然事务可以并发操作,这里就有一些问题:一个事务在写数据的时候,另一个事务要读这行数据,该怎么处理?一个事务在写数据,另一个数据也要写这行数据,又该怎么处理这个冲突? 这就是并发事务所产生的一些问题。具体来说就是:脏读、不可重复读和幻读。 一、概念说明 以下几个概念是事务隔离级别要实际解决的问题,所以需要搞清楚都是什么意思。 1、脏

weixin_41814871的博客 4万+

快速理解脏读、不可重复读和幻读

MySQL的InnoDB引擎是支持事务的,但是并发事务的处理又会带来以下问题: 脏读 不可重复度 幻读 一、脏读 脏读指事务A读取到了事务B更新了但是未提交的数据,然后事务B由于某种错误发生回滚,那么事务A读取到的就是脏数据。 具体的说,一个数据原本是干净的,但是事务B将它进行修改使得其不再干净,此时事务A读取到事务B修改后的数据,也就是脏数据,称为脏读,后来事务B由于良心发现又将数据回滚为最初的样子,而事务A不知道事务B进行了回滚操作,最终事务A读取到的是脏数据,称为脏读。 结论:读取未提交的数据!

郑皓云的博客 8585

【MySQL理论】脏读、不可重复读、幻读

文章目录1. 脏读(dirty read)脏读是指事务读取到其他事务未提交的数据2. 不可重复读(non-repeatable read)不可重复读是指在同一次事务中前后查询不一致的问题3. 幻读(phantom read)幻读是一次事务中前后数据量发生变化,用户产生不可预料的问题4. 总结5. 解决方法 1. 脏读(dirty read) 脏读是指事务读取到其他事务未提交的数据 例如:有事务A、B和一条记录:id为1,name为张三 B首先进行更新操作,将name的值由张三改为张老三,但还未提交事务 be

Hi there 1万+

脏读、不可重复读、幻读

锁就是防止其他事务访问指定的资源的手段。锁是实现并发控制的主要方法,是多个用户能够同时操纵同一个数据库中的数据而不发生数据不一致现象的重要保障。一般来说,锁可以防止脏读、不可重复读和幻觉读。 事务并发产生的问题:        脏读:一个事务读取到了另外一个事务没有提交的数据            事务1:更新一条数据                            

徐振跃的专栏 5万+
上一篇: 详解 MySQL 索引的最左前缀匹配原则
下一篇: 为什么 MySQL 选择使用 B+ 树作为索引结构?
凭君语未可
博客等级 码龄3年 3577粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凭君语未可

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值