数据库中事务的隔离级别 小结

【ROS学习笔记】8.话题消息(Message)的定义与使用 ROS学习笔记8——话题消息(Message)的定义与使用 阅读详情

问题:

对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:  

  • 更新丢失(Lost update):对于并发更新同一条记录的两个事务 T1, T2, T1先更新完,T2紧接着更新,却又因故回滚,数据因此回到了T1和T2操作前的状态。由于没有引入排他写锁,T1中途写入的内容便丢失了。
  • 脏读(Dirty Reads): 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的。
  • 不可重复读(Non-repeatable Reads):对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了. 
  • 幻读(Phantom Reads): 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.  


解决:

针对上述四种状况,设计了四种隔离级别:

隔离级别 更新丢失 脏读 不可重复读 幻读
Read Uncommitted - 可能发生 可能发生 可能发生
Read Committed - - 可能发生 可能发生
Repeatable Read - - - 可能发生
Anomaly Serializable - - - -

READ UNCOMMITTED(允许读到尚未提交的数据)  :  允许事务读取未被其他事务提交的变更,脏读、不可重复读和幻读的问题都会出现  
READ COMMITED(只能读到已提交数据)  : 只允许事务读取已经被其他事务提交的变更,可以避免脏读,但不可重复读和幻读问题仍然会出现  
REPEATABLE READ(事务内重复读同一块数据保持不变) :  确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但幻读的问题依然存在  
SERIALIZABLE(事务逐个串行操作)  : 确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,所有并发问题都可以避免,但性能十分低。

每种隔离级别的实现:

隔离级别 写入锁 读取锁 范围锁
READ UNCOMMITTED V - -
READ COMMITED V S -
REPEATABLE READ V V -
SERIALIZABLE V V V

"V" 排他锁。锁定将持续到事务结束。

"S" 共享锁。一般写锁都是排他的,否则连最低的事务隔离级别都无法保证,会出现更新丢失(Lost update)的情况。读锁有共享读锁和排他读锁之分,两者都要等待对应范围的写锁被释放后才能获取,以避免读到脏数据;区别是S仅在读取完成后即释放,而无需等到事务结束,且支持同时被多个读操作持有(意即共享)。显然前者锁定的粒度更小,因而性能较优。


oracle和mysql对事务隔离级别的支持

Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED   
Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ  


参考

http://baike.baidu.com/view/2943500.htm 对“更新丢失”的描述不到位,在“解决方案”中错误地使用了“瞬间共享读锁”和“共享读锁”。

http://blog.youkuaiyun.com/w_l_j/article/details/7354530 没有提到“更新丢失”的情况,在READ UNCOMMITTED中没有提到其保证不出现更新丢失。隔离级别的翻译较繁体的意译更直观

http://en.wikipedia.org/wiki/Isolation_(database_systems) 英文维基,一贯得准确和可靠。中文版“隔離級別與鎖定”(Isolation Levels vs Locks)一节是错误的,顺手改了下。

http://docs.jboss.org/jbosscache/1.4.0/TreeCache/en/html/transactions.html 5.1.2.1. Isolation levels 写得简单、直观、到位。严重推荐。

http://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm oracle官方文档。


DeerFlow 在 Windows 上的安装与启动详细步骤 DeerFlow Windows安装与启动指南 DeerFlow是基于LangGraph的AI Agent系统,包含后端服务和前端界面。后端安装需Python 3.12+,创建虚拟环境后安装依赖,需注意解决langgraph版本冲突问题(推荐1.0.8版本)。配置文件中需设置模型参数(如本地Qwen3-32B-AWQ模型)和sandbox配置。启动分为两步:LangGraph Server(端口2024)和Backend Gateway(端口8001)。前端要求Node.js 22+和pnpm,配置.env 阅读详情

相关推荐

基于IDEA与Mill构建Windows下的Chisel开发环境——香山处理器源码解析实战

本文详细指导如何在Windows系统下使用IDEA集成开发环境和Mill构建工具搭建Chisel开发环境,并以香山处理器源码为实战案例进行解析。内容涵盖环境准备、源码获取、工程构建、IDEA配置优化及代码阅读技巧,帮助开发者高效学习硬件设计语言。

a1b2c3d的博客 717

事务隔离级别总结

事务隔离级别总结 一. ACID特性 事务(Transaction)是数据库系统中一系列操作的一个逻辑单元,所有操作要么全部成功要么全部失 败。 事务是区分文件存储系统与Nosql数据库重要特性之一,其存在的意义是为了保证即使在并发情况下也 能正确的执行CRUD操作。怎样才算是正确的呢?这时提出了事务需要保证的四个特性即ACID: A:原子性(Atomicity) 一个事务中的所有操作,要么全...

weixin_34452850的博客 370

Python | 处理CMIP6 NC数据,以tas为例

各位同学,一般在文章最后一章我们可能会做不同气候情景下变量的未来时空变化特征,类似上图。从cmip6下载的nc数据常需要转换格式、裁剪到研究区和重采样等,本期代码可以解决这类问题。

qq_48539301的博客 1384

数据库的事务隔离级别总结

一、事务及其四大特性 事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再改变。否则,事务就取消或者回滚,更改无效。 举个例子来说,张三给李四转了1000元钱,那么在数据库操作时,就要先把张三的账户减去1000元,再把李四的账户加上1000元,两部分操作放在一起,才是一个完整的转账过程,也可称之为事务。 1

程序员博客 352

用STM32的SPI模式2搞定SSI绝对值编码器通信(附完整代码与避坑点)

本文详细解析了如何使用STM32的SPI模式2实现SSI绝对值编码器通信,包括硬件设计、SPI配置、数据处理算法及稳定性优化技巧。通过完整的代码示例和避坑指南,帮助工程师解决时序匹配、数据解析等常见问题,提升工业自动化系统中的编码器通信可靠性。

weixin_27252001的博客 267

R语言基础之R语言入门

R语言最初是由新西兰奥克兰大学统计系的教授Ross Ihaka和Robert Gentleman在S语言基础上开发完成的。是一门解释性语言。在我看来R语言是一门数学性极强的语言,或者说这是一门为数学而生的语言,因为其具有极其出色的计算与统计分析能力...

weixin_46912400的博客 5万+

MySQL 基础 ————事务与隔离级别总结

一、事务的概念 事务主要针对查询以外的其他几项操作:插入、更新、删除,将多条SQL合并到一个执行单元中,要么全部执行成功,要么全部回滚。MySQL的TCL 事务控制语言,就是为事务而设计,接下来我们来总结一下。 二、事务的 ACID 属性 1、原子性 原子性是指事务是一个不可分割的工作单元,不可分割,意味着要么全部执行,要么全部回滚。 2、一致性 事务必须使数据库从一个一致状态,变换到...

Morty的技术乐园 1069

如何使用 Ansys OptiSlang 同时运行多个参数化设计研究

了解如何通过使用 OptiSLang 同时运行多个参数化设计研究来提高工作效率。

jkh920184196的博客 2387

总结:事务及隔离级别

一、事务的基本要素(ACID) 1、原子性(Atomicity) 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2、一致性(Consistency) 事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 3、隔离性(Isolation) 对同一数据的操作,不同的事务之间彼此没有

w2009211777的专栏 513

全新DEIM有效涨点改进目录 | 本专栏持续更新500+篇内容 | 包含各种顶会顶刊卷积、注意力、特征融合模块、有效特征聚合提取模块,上采样模块、下采样模块,二次创新模块、独家创新等几百种创新点改进

🚀【CVPR2025DEIM改进专栏速览】🔥 专栏提供500+篇目标检测创新改进方案,涵盖卷积/注意力/特征融合等创新改进点,均源自顶会论文及实战经验。支持多领域应用(工业/医疗/遥感等),配套完整教程和答疑服务。亮点包括: 1️⃣ 持续更新SOTA模型改进方案 2️⃣ 小白友好型实验操作指南 3️⃣ 跨学科科研支持(已助非计算机专业发表论文) 4️⃣ 提供虚拟环境配置方案。 订阅可获完整项目代码及交流群服务,适合研究生科研论文改进需求。价格呈上涨趋势,早订更优惠!

Ai缝合怪、助力小伙伴高效发论文 2051

C#项目实战——【实例】企业人事管理系统(二):4、数据库与数据表设计;5、创建项目;

(1)展开新建的db_PWMS数据库节点,选中“表”节点,单击鼠标右键,在弹出的快捷菜单中选择“新建表”命令,如下图:(2)在SQL Server 2008管理器的右边显示一个新表,这里输入要创建的表中所需要的字段,并设置主键,如下图:(3)单击“保存”按钮,弹出“选择名称”对话框,如下图,输入要新建的表名“tb_Login”,单击“确定”按钮,即可在数据库中添加一个表。

做有价值的事,积累有价值的笔记! 1621

数据库事务的ACID特性与事务隔离级别小结

前言 今天是本博客开博一周年,一年来写了将近30万字,收获颇丰。但是回头翻看,发现之前写的“漂在半空中”的东西居多。所以最近几天打算搞些平时不会经常注意到,但是又非常基础、重要的知识点,权当复习和查漏补缺,以及训练一下自己“说人话”的能力。 本文只总结概念和理论层面的东西,数据库事务的具体实现细节会以MySQL为例另写文章来说(flag立好了_(:з」∠)_ 数据库事务与ACID特...

LittleMagic's Blog 484

基于深度学习的活体人脸检测系统:YOLOv5、YOLOv6、YOLOv7、YOLOv8实现与UI界面设计

本博客详细介绍了如何基于YOLOv5、YOLOv6、YOLOv7、YOLOv8模型实现一个完整的活体人脸检测系统。系统包括数据集准备、模型训练、UI界面设计以及实时检测功能的实现。通过YOLO系列模型的应用,我们能够高效、准确地进行人脸检测和活体验证。未来,随着YOLOv9和其他新一代目标检测模型的出现,我们可以进一步提高检测精度和速度。此外,集成更多的传感器数据(如深度传感器、红外线传感器)可以使活体检测系统更加安全和稳定。

YOLO 541

数据库笔记4---事务特性ACID、隔离级别、事务并发问题小结

目录一、什么是事务二、事务的四个特性(ACID)1. 原子性(Atomicity)2. 一致性(Consistency)3. 隔离性(Isolation)4. 持久性(Durability)三、隔离级别和并发问题1.丢失更新2.脏读3.幻读(phantom read,也叫虚读)4.不可重复读四、事务的隔离级别1. 未提交读(Read uncommitted)2.提交读(Read committed...

麦田里的码农 834

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

sql事务

- 事务操作-- 数据准备id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',money int comment '余额')comment '账户表';insert into account(id,name,money) VALUES (null,'张三',2000),(null,'李四',2000);-- 恢复数据。

yuey2003的博客 242

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

面试官再问隔离级别?这篇“客栈故事”让他闭嘴惊艳!

掌柜的得急得直跳脚,因为周转太慢,银子赚得也慢了,简直是“为了芝麻丢了西瓜”,有点“因噎废食”的味儿了。”,你刚要订,他又说“哎呀客官,刚有位爷订走一间,现在只剩两间啦?• (客栈小道消息:咱这龙门飞甲客栈如果是 MySQL 开的 InnoDB 分号,那它的“记忆水晶球”可厉害了,一般这种数数儿的活儿,它能让张三一直以为就5个人,让乔帮主暂时“隐身”,能耐大着呢。快是快,但太不靠谱,纯属“添乱型”。• 张三再看李寻欢的账,他看的还是自己那个“第一印象”的水晶球快照,所以李寻欢在他眼里,雷打不动还是!

郑龙飞 1014

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据库之事务隔离级别详解

儿子某一天去消费,花了8千元,然后他的父亲去查看他今天的消费记录(全表扫描,儿子事务开启),看到确实是花了8千元,就在这个时候,儿子花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。但是转账时父亲不小心按错了数字,按成10万/月,该钱已经打到儿子的账户,但是事务还没有提交,就在这时,儿子去查看自己的储蓄卡,发现转多了9万,以为凭空多了9万非常高兴。事务的隔离性是指在并发执行的多个事务中,每个事务的执行互不影响,每个事务都有自己独立的空间进行操作。儿子看到的是父亲还没提交事务时的数据。

qq_39939541的博客 1万+

MySQL事务的4种隔离级别

1 简介 事务的4种隔离级别分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、 可重复读(Repeatable Read)和串行化(Serializable)。 首先,在了解这4种隔离级别前就必须先要了解其前提,也就是事务,本文简单介绍一下关于事务。 之后,我们也要理解这4种隔离级别产生的原因和场景展现以及4种隔离级别是如何解决问题的。 最后,再简单介绍一下这4种隔离级别的实现机制。 2 什么是数据库事务? 事务由一个有限的数据库操作序列组成,这些操作要么全部执行

Little_fxc的博客 1万+

四种事务的隔离级别

本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事务的基本要素(ACID)   1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。    2、一...

繁星、晚风 4万+

事务的 4 个隔离级别

一、事务的 4 个隔离级别 未提交读(Read Uncommitted):事务可以读取未提交的数据,也称作脏读(Dirty Read)。一般很少使用。 提交读(Read Committed):是大都是 DBMS (如:Oracle, SQLServer)默认事务隔离。执行两次同意的查询却有不同的结果,也叫不可重复读。 可重复读(Repeable Read):是 MySQL 默认事务隔离级别。能确保同一事务多次读取同一数据的结果是一致的。可以解决脏读的问题,但理论上无法解决幻读(Phantom R

Gnahzi 1万+

数据库的事务的基本特性,事务的隔离级别,事务隔离级别如何在java代码中使用,使用MySQL数据库演示不同隔离级别下的并发问题

解读:两个事务 A 和 B,首先 A 事务对 数据 a 执行加 500 的操作 a = 1500,此时 B 事务读取数据 a 的值 1500,后 A 事务 又对数据 a 执行减500 的操作 a = 1000 ,A 事务 commit。银行两次查询不一致,可能就会很困惑,不知道哪次查询是准的。以转账为例子,A向B转账,假设转账之前这两个用户的钱加起来总共是2000,那么A向B转账之后,不管这两个账户怎么转,A用户的钱和B用户的钱加起来的总额还是2000,这个就是事务的一致性。

weixin_44797327的博客 1464

常见的数据库事务隔离级别

为什么会出现数据库的隔离级别呢? 数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题. 事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,

。。。。 3442

SpringBoot 系列教程之事务隔离级别知识点小结

简单来讲,两个事务 A,B 分别更新一条记录的 filedA, filedB 字段,其中事务 B 异常,导致回滚,将这条记录的恢复为修改之前的状态,导致事务 A 的修改丢失了,这就是更新丢失。从上面的输出中,在只读事务,前面两次查询,结果一致,虽然第二次查询时,读写事务修改了这个记录,但是并没有读取到这个中间记录状态,所以这里没有脏读问题;而 9 属于当前读;读取到另外一个事务未提交的修改,所以当另外一个事务是失败导致回滚的时候,这个读取的数据其实是不准确的,这就是脏读。

程序员高级码农的博客 1034

Spring事务的基本原理、传播属性、隔离级别以及数据库事务

一、事务的基本要素(ACID) 事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID)。 原子性(Atomicity):指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成。 ...

做最专业的总结 大师 2万+

mysql的四种事务隔离级别

一、事务的四个特性 在介绍mysql的四种隔离级别之前,我们首先要对事务有一个基本的了解。 事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。 (1)原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 (2)一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处

weixin_48016395的博客 1万+

MySql 事务隔离级别详解

事务隔离是指在数据库中,多个并发执行的事务之间相互隔离的程度。事务隔离级别是一个重要的概念,它定义了事务在读取和修改数据时能够接触到其他事务所做的修改的程度。

流华追梦的专栏 1860
上一篇: xml如何探测字符编码
下一篇: 一致性hash
doraeimo
博客等级 码龄20年 11粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值