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

MySQL~数据并发问题(脏写、脏读、不可重复读、幻读)与SQL隔离级别演示 文章目录数据并发问题脏写脏读不可重复读幻读MySQL中的隔离级别如何设置事务的隔离级别 数据并发问题 脏写 脏读 不可重复读 幻读 四个问题严重性从高到低: 脏写、脏读、不可重复读、幻读 MySQL中的隔离级别 脏写的问题非常严重,不论是哪种隔离级别,都不允许脏写的问题发生 查看默认的隔离级别: mysql> show variables like 'transaction_isolation'; +-----------------------+-----------------+ | Va 阅读详情

伴随着事务的不同隔离等级,会出现不同的读取现象。ANSI/ISO 标准 SQL 92指出两个事务并发执行,一个事务读数据,另一个事务写数据时可能出现的三种情况。

  1. 幻影读(Phantom reads)
    事务T1进行两次相同的查询,前后2次查询的结果由于事务T2插入了新数据产生了不同的结果。
T1                                                                    T2
select * from account where balance > 100; 
                                                                        insert into account(balance) values(200);
                                                                        commit;
select * from account where balance > 100;
commit;

事务T1由于第二次查询结果多了事务T2新插入的值,和第一次查询时的结果不一致,多出了一条 balance = 200 的数据。
这种情况在低于串行化(Serializable)的隔离等级:可重复的读(Repeatable Read), 读已提交(Read Commited), 读未提交(Read Uncommited)下会发生。

  1. 不可重复读(None-repeatable reads)
    事务T1对同一数据进行两次查询,由于事务T2对相同数据的修改,导致事务T1前后两次查询结果
    不一致(不可重复)。
T1                                                                    T2
select * from account where id = 1; 
                                                                        update account set balance = 200 where id = 1;
                                                                        commit;
select * from account where id = 1;
commit;

假设事务T1第一次查询后的结果balance = 100,由于事务T2的介入,第二次对同一数据的查询将会得到和第一次不同的结果balance = 200。
这种情况在低于可重复读(Repeatable Read的)隔离等级:读已提交(Read Commited), 读未提交(Read Uncommited)下会发生。

  1. 脏读(Dirty reads)
    事务T1读取到事务T2更新却未提交的数据,随后由于回滚或者更新覆盖导致事务T1读取到无效数据。
T1                                                                    T2
                                                                        update account set balance = 200 where id = 1;
select * from account where id = 1;
commit;
                                                                        rollback;

由于事务T2的缘故,事务T1将会读取到 balance = 200 的结果,但是事务T2随后进行了回滚,事务T1读取了无效数据。
这种情况在低于读已提交(Read Commited)的隔离等级:读未提交(Read Uncommited)下会发生。

上诉三种情况,从下到上,为了避免相应的情况发生,要求的隔离等级依次升高。

MySql的事务是什么?什么是脏读?幻读?不可重复读? 关于事务 阅读详情

相关推荐

从Delphi 7到Delphi 10.4.1的代码迁移:关键挑战与实用解决方案

本文详细探讨了从Delphi 7升级到Delphi 10.4.1进行代码迁移的关键挑战与实用解决方案。核心内容包括应对Unicode字符串处理、64位数据类型变化、VCL/FMX界面框架选择、第三方组件迁移以及数据库层现代化改造(如从BDE迁移至FireDAC)。文章为开发者提供了系统的迁移前准备、核心问题攻克策略及测试落地指南,旨在帮助团队高效、平稳地完成系统现代化升级。

weixin_29250403的博客 526

Spring和数据库的事务

Spring和数据库的事务 1.首先说明一下事务并发引起的三种情况: 1) Dirty Reads 脏读 一个事务正在对数据进行更新操作,但是更新还未提交,另一个事务这时也来操作这组数据,并且读取了前一个事务还未提交的数据,而前一个事务如果操作失败进行了回滚,后一个事务读取的就是错误数据,这样就造成了脏读。 2) Non-Repeatable Reads 不可重复读 一个事务多次读取同一数据,在该事务还未结束时,另一个事务也对该数据进行了操作,而且在第一个事务两次次读取之间,第二个事务对数据进行了更新,那么

weixin_41185826的博客 522

鸿蒙OpenHarmony技术:【Docker编译环境】

OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完成复杂的开发环境准备工作。独立Docker环境:适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。基于HPM的Docker环境:适用于使用HPM工具进行发行版编译的场景。点击或者复制转到。表1Docker镜像介绍系统类型运行平台Docker镜像仓库标签标准系统(独立Docker环境)3.2小型系统(独立Docker环境)3.2轻量系统(独立Docker环境)3.2。

m0_62167422的博客 1438

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

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

qq_28052907的博客 4014

Ardupilot姿态控制详解(完结篇)

本文主要是对过去写的一些APM中姿态控制流程及函数博文的汇总。 按照之前写的博文以及个人认为的学习顺序,给出APM姿态控制器的学习顺序如下: APM姿态旋转理论基础 Ardupilot姿态控制器 PID控制流程(整定后的P控制器) 详解APM的开方控制器sqrt_controller Ardupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析 Ardupilot倾转分离函数thrust_heading_rotation_angles Ardupilot四元数姿态控制

moumde的博客 7017

强化学习新手上路:用PPO-Clip轻松玩转Pendulum-v1(PyTorch保姆级教程)

本文提供了一份基于PyTorch的PPO-Clip算法实战教程,指导强化学习新手在Pendulum-v1环境中构建连续控制智能体。教程详细解析了PPO-Clip的核心机制,特别是其Clip机制如何限制策略更新幅度以确保训练稳定,并涵盖了从环境配置、策略网络设计、经验收集到完整训练框架搭建的全过程,是掌握连续动作空间强化学习的实用指南。

weixin_29062963的博客 265

不可重复读和幻读区别

学数据库并发控制的基础知识时,经常搞不清楚不可重复读和幻读(幻影现象)的区别,后来终于梳理清楚辽。 幻读是由于一个事务读数据,另一个事务新增或者删除数据,导致读数据的事务二次读数据的时候出现数据不一致。 不可重复读的重点是修改。一个事务读数据,另一个事务修改数据,导致读数据的事务二次读数据的时候出现数据不一致。 ...

qq_45953141的博客 852

深信服桌面云实战:从零部署到高效运维的配置全景指南

本文详细介绍了深信服桌面云从零部署到高效运维的全流程配置指南,涵盖硬件规划、平台部署、虚拟桌面发布、终端管理及性能优化等关键环节。特别强调了双万兆网络架构、分布式存储配置和智能调度功能的应用,帮助用户实现高性能、高可用的虚拟桌面环境。

weixin_28568819的博客 392

幻读(phantom read)详解

基本定义(也是来自网络) 当某个事务a范围查询数据时,另一个事务b在该范围内插入了数据,当事务a再次范围查询时,会产生幻行(即多了事务b插入的那行数据)。 网络上的其他定义 看看幻读的正确理解 时间点 事务A 事务B 1 开启事务 2 开启事务 3 查询数据“张三”,不存在

timerzip的博客 2519

基于粒子群算法的PID控制器优化设计

粒子群算法、PID、寻优

qq_46107700的博客 2万+

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

数据库的 脏读 不可重复读 幻读 是什么

数据库的 脏读 不可重复读 幻读 是什么

462

调整开关频率处理传导骚扰超标的系统方法

针对某产品在传导骚扰测试中660kHz频点超标问题,分析发现与DC-DC模块开关频率直接相关。通过调整模块开关频率至500kHz,使其避开标准限值严苛频段(0.53-1.8MHz),在不改变硬件设计的情况下实现测试通过。该案例表明,利用EMC标准的频率特性进行"频谱设计"比传统滤波手段更高效,建议在多模块系统中采用1:2:4等频率规划策略,从源头降低噪声耦合风险。这一频率迁移思路为EMC优化提供了新范式。

硬核科技 310

事务的四大特性&脏读、幻读、不可重复读的区别&事务的隔离级别

一、什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 事务的四大特性: 1 、原子性 (atomicity):强调事务的不可分割. 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 2 、一致性 (consistency):事务的执行...

qq_37432174的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

脏读,不可重复读,幻读区别和避免

在了解脏读,不可重复度,幻读之前,首先要明白这三种情况的出现都是和数据库并发事务有关联的,如果所有的读写都按照队列的形式进行,就不会出现问题。 名词解析和解决方案 脏读 脏读又称无效数据读出(读出了脏数据)。一个事务读取另外一个事务还没有提交的数据叫脏读。 例如:事务T1修改了某个表中的一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因回滚(Rollba...

vinter_he 1万+

android 蓝牙通讯demo

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

脏写,脏读,不可重复的,幻读

事务可以分成 4 个隔离级别:读未提交、读已提交、可重复读、串行化。而事务隔离是为了解决脏读、不可重复读、幻读问题,下表展示了 4 种隔离级别对这三个问题的解决程度: 隔离级别 脏读 不可重复读 幻读 READ UNCOMMITTED 可能 可能 可能 READ COMMITTED 不可能 可能 可能 REPEATABLE READ 不可能 不可能 可能 SERIALIZABLE 不可能 不可能 不可能 下面就来介绍下。 脏写 先补充一个:脏写。 原来有一个数据时null值,

weixin_43677673的博客 686

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

脏读、不可重复读、幻读已经如何处理

文章目录前言一、五种事务隔离级别是什么?二、解决案列 前言 事务并发产生的问题: 脏读:一个事务读取到了另外一个事务没有提交的数据 不可重复读:在同一事务中,两次读取同一数据,得到内容不同 幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同 一、五种事务隔离级别是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 事务隔离五种级别: TRANSACTION_NONE 不使用事务。 TRANSACTION_READ_UNCOMMITTED 允许脏读。

jsxllht的博客 410

实操事务的四大隔离级别以及浅解三大读(脏读、不可重复读、幻读)现象

一个事务是一个完整的业务逻辑,一个最小的工作单元,例如转账本质上是多条DML语句同时成功,同时失败。 事务的四大隔离级别:读未提交(READ_UNCOMMITTED)、读已提交(READ_COMMITTED)、可重复读(REPEATABLE_READ)、可串行化(SERIALIZABLE)。 三大读现象:脏读现象、不可重复读现象、幻读现象

wjw89的博客 1385

数据库并发导致的脏读 不可重复读 幻读的处理方法

在做ERP订单接入仓库库存的时候出现了一个问题。下单会读取该商品是否有库存。如果有那么就下单 减去(可下单库存,物理库存不变) 没有则提示库存不足 在并发情况下就会导致 u1用户下单编号为1的商品1个 u2用户也下单编号为1的商品1个。编号为1的商品库存只有1个。 那么当u1在读取出数据的时候发现库存有一个 但是还没有写入库存的操作 u2也下单成功并提交 那么就会导致数据错乱 ...

497

数据库ACID四大特性及脏读,不可重复读,幻读,两种事物丢失

转自:https://blog.csdn.net/xmh594603296/article/details/79676844 A 原子性(Atomicity) [ˌædəˈmɪsədi] 就是把事物分割成像原子一样,表示我们事物需要细微的去控制。比如我给你转钱,里面有我扣钱,你到账。总不能我扣了钱,你没到账这种情况吧。所以就是指转账这个事物, 里面的所有环节哪怕一个出错,...

从入门到放弃的博客 210

mysql 并发 脏读_数据库并发导致的脏读 不可重复读 幻读的处理方法

修正2020-04-23 之前是刚参加工作的理解 很多问题,现在回来重新梳理事物的特性原子性表示一个最小的逻辑单元,要么都执行 要么都不执行一致性事物处理前与处理后的状态的要是一致的(a账户有200元 b账户有300元 共计500元 a账户给b账户转账100元。事物处理后2个账户总额也为500元)隔离性每个事物都有自己的数据空间,使事物的处理结果不会被别的事物所影响持久性事物提交 数据就永久...

weixin_39775428的博客 308

mysql-丢失更新,脏读,幻读,不可重复读

1、丢失更新 如果两个事务都要更新数据库一个字段X,x=100 事务A 事务B 读取X=100 读取X=100 写入x=X+100 写入x=X+200 事务结束x=200 事务结束x=300 最后x=300 两个不同事物同时获得相同数据,然后在各自事务中同时修改了该数据,那么先提交的事务更新会被后提交事务的更新给覆盖掉,这种情况事务A的更新...

qq_35866165的博客 421

JAVA中什么是事物

说起来事物,就跟数据库操作有关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。 事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。 事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。 事务...

weixin_41758046的博客 5377

详解mysql事物隔离级别与锁机制

事物隔离级别 首先看下数据库事物四大特性,ACID,原子性,一致性,隔离性,持久性。 隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离,互相不受影响。同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。mysql具有四种事物隔离级别,隔离力度依次递增,高度隔离会限制可并行执行的事务数,所以一些应用程序降低隔离级别以换取更大的吞吐量。不同业务场景下使用不同的数据...

a281246240的专栏 4478

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

开始在学习这几个概念的时候,发现不仅是身边,而且网上有很多人都把这些概念搞混淆了,特别是幻读.又由于这些都是一些概念性的东西,所以我就去查了一下官方文档:详见: MySQL 事务隔离级别相关官方文档翻译 为了测试我们先准备一个表并插入几条数据: drop table if exists t; create table t( id int primary key auto_increment

SPlus_SS的博客 438
上一篇: 事务的隔离
下一篇: Java Servlet环境中获取完整的客户端请求地址
扶摇升
博客等级 码龄10年 30粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值