事务隔离级别

MySQL事务隔离级别 本文主要探讨MySQL事务隔离级别的使用,具体什么场景使用啥,实战验证出现的并发事务问题 阅读详情

四种隔离级别:

隔离级别脏 读不可重复读取幻 像
读操作未提交(Read Uncommitted) 是 是 是
读操作已提交(Read Committed) 否 是 是
可重复读(Repeatable Read) 否 否 是
快照 否 否 否
可串行读(Serializable) 否 否 否

 

 SQL Server 还支持使用行版本控制的两个事务隔离级别:已提交读隔离 和 新事务隔离级别(快照)。

  • READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON,提供语句级读取一致性。
  • ALLOW_SNAPSHOT_ISOLATION 数据库选项设置为 ON,提供事务级别的读取一致性。读取操作不获取页锁或行锁,读取其他事务修改的行时,读取操作将检索启动事务时存在的行的版本。(快照隔离)
  • SQL Server 不支持元数据的版本控制。在快照隔离下,显式事务中可以执行的 DDL 操作存在限制,BEGIN TRANSACTION 语句之后不允许使用任何公共语言运行时 (CLR) DDL 语句或下列 DDL 语句:ALTER TABLE、CREATE INDEX、CREATE XML INDEX、ALTER INDEX、DROP INDEX、DBCC REINDEX、ALTER PARTITION FUNCTION、ALTER PARTITION SCHEME。
  • 已提交读隔离比快照隔离占用的 tempdb 空间少;已提交读隔离可用于分布式事务,而快照隔离不能用于分布式事务;已提交读隔离可用于大多数现有应用程序,而不需要进行任何更改。可以动态优化使用默认隔离级别(已提交读)编写的应用程序。已提交读的行为(是否使用行版本控制)是由数据库选项设置确定的,可以对其进行更改,而不会影响应用程序。
  • 快照隔离很容易发生不适用于使用行版本控制的已提交读隔离的更新冲突。当在快照隔离下运行的事务读取另一个事务稍后会修改的数据时,快照事务对同一数据的更新会导致更新冲突,该事务将终止并回滚。而使用行版本控制的已提交读隔离不存在此问题。

 隔离级别是根据称为 现象(Phenomena)的三个禁止操作序列来声明的:

名称描述

丢失更新

当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,就会发生这种情况。

 

脏读
(Dirty Read)

如果一个事务在提交操作结果之前,另一个事务可以看到该结果,就会发生这种情况。

 

不可重复读/模糊读
(Non-Repeatable Read)

如果一个事务在提交结果之前,另一个事务可以修改和删除它,就会发生这种情况。

 

幻像读
(Phantom Read)

当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,就会发生这种情况。

有删除,有新增。

 

锁分类关键字

粒度

ROWLOCK, PAGLOCK, TABLOCK, DBLOCK

模式

UPDLOCK, XLOCK

并发

NOLOCK, HOLDLOCK, READCOMMITTED, REPEATABLEREAD, SERIALIZABLEs

 

 

Transaction中IsolationLevel的类型定义如下:

Chaos 无法改写隔离级别更高的事务中的挂起的更改。
ReadCommitted 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。
ReadUncommitted 可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。  
RepeatableRead 在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。  

    使用该隔离级别将限制其他用户更新自己所持有的数据,以PK,IX(Unique)为依据的不限制插入。
Serializable 在DataSet上放置范围锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行。

    使用该隔离级别将限制其他用户更新自己所持有的数据,限制其他用户插入数据。 
Unspecified  正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。

 

附测试C#代码:

SQL Query:

-- BEGIN TRANSACTION
INSERT INTO Task (TaskID,SenderAliasID,TaskStatus)
VALUES('2009081215121000',3,3)

-- waitfor delay '00:00:00.200'

DELETE FROM Task WHERE TaskID='2009081215121000'
-- COMMIT

.

基于Playwright+Pytest+Yaml+Allure的UI自动化测试框架实战指南 本文详细介绍了基于Playwright+Pytest+Yaml+Allure的UI自动化测试框架实战指南,涵盖环境搭建、核心功能实现及高级技巧。通过数据驱动测试、页面操作封装和智能等待机制,提升测试效率与可维护性。Allure报告增强功能为团队提供直观的质量反馈,助力高效UI自动化测试。 阅读详情

相关推荐

LabVIEW+数据库应用系列保姆级教程,第二篇增删查改

2021-7-2 先挖好坑

wwplh5520370的博客 7363

事务的隔离级别

事务的隔离级别 事务的四大特性分别是:原子性、一致性、隔离性、持久性 幻读和不可重复读都是在同一个事务中多次读取了其他事务已经提交的事务的数据导致每次读取的数据不一致,所不同的是不可重复读读取的是同一条数据,而幻读针对的是一批数据整体的统计(比如数据的个数) 以MYSQL数据库来分析四种隔离级别 第一种隔离级别:Read uncommitted(读未提交) 如果一个事务已经开始写数据,则另外一个事...

zhouym_的博客 16万+

抖音最新风控体系研究

小编从技术角度对抖音的风控史和落地目标,跟大家聊一聊抖音,包括海外版抖音TikTok的现状与生态。 1、非常非常早的时期,抖音刚出来的时候,没有任何封禁,这个阶段,导入一个开发库,加上一个请求头,咵咵咵的数据随便拿。 2、2018-2019年,抖音加入了设备id和xg机制,在绝大多数的接口中,携带了设备id参数,同时在请求头中加入了xg,如今的apk市场,能追溯到的最早xg是0200打头的,而小编见过的最早的xg是0000打头的。这个时期的接口,这些参数都还只是预设,没有实际的用处,设备随便写,

qq517348412的博客 1万+

【MySQL事务】事务的隔离级别

正在进行中且尚未提交。

2301_80224556的博客 2120

SECS/GEM协议库及开源代码

以下是在开发SECS/GEM协议过程中,在网络上搜集协议实现资源,希望对SECS/GEM协议感兴趣的同学能有所帮助。 开源代码 freesecs FREESECS 是一个开源的SEMI SECS协议库,采用C++语言实现,可运行于Linux, MacOS X, NetBSD。 实现协议:E37.1、E5 开源地址:freesecs download | SourceForge.net 下载地址:https://download.youkuaiyun.com/download/BT_LEO/24305429

码农的历程 9942

使用pdfBox实现pdf转图片出现中文方块乱码 简单修改源码解决

参考文章 问题排查:使用pdfbox将pdf转image时STSong-Light字体中文乱码 pdfbox版本是2.0 日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。 正常操作就是安装缺失的 STSong-Light 字体,但是在网上搜到的都是 STSong

aji_csdn的博客 5266

Spring事务隔离级别详解

Spring事务隔离级别详解

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 2829

生成对抗网络(GAN)在数据增强中的应用【附核心实战代码】

生成对抗网络(GAN)由Ian Goodfellow等人在2014年提出。它包含两个主要的部分:生成器(Generator)和判别器(Discriminator)。生成器负责生成假数据,而判别器则用于区分输入的数据是真实的还是由生成器生成的。通过这种对抗过程,生成器不断优化自己,生成越来越真实的样本。最终,生成器生成的样本几乎无法被判别器区分与真实数据。

一键难忘的博客 3120

【Spring】事务的隔离级别,Spring的事务隔离级别和事务传播机制

本文回顾了MySQL的四种事务隔离级别(读未提交、读提交、可重复读、串行化),并介绍了Spring框架中的五种事务隔离级别和七种事务传播机制。MySQL的隔离级别解决了并发事务的数据一致性问题,而Spring的事务传播机制则处理了事务在方法调用间的传递行为。文章详细说明了每种传播机制的特点,如REQUIRED(默认)、REQUIRES_NEW(创建新事务)等,并通过源码展示了Spring中枚举类的实现方式。最后提到可以通过@Transactional注解的isolation和propagation属性来设置

Yeeear的博客 1073

YOLO26涨点改进 | 独家创新,细节涨点改进篇 | CVPR 2025顶会 | YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文

本文给大家介绍Mona即插即用模块, 含MoCAA和DyTMona二次创新模块优化YOLO26模型。YOLO26引入 Mona通过引入多尺度视觉友好型卷积滤波器(如3x3、5x5、7x7深度卷积)和可伸缩归一化层来优化适配器设计,以更好地处理视觉信号并调节输入特征分布。YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文。适合目标检测、图像分割、图像分类等所有CV任务通用即插即用模块。

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

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

伶俐角少儿编程 819

Spring 有几种事务隔离级别?

事务隔离级别是对事务 4 大特性中隔离性的具体体现,使用事务隔离级别可以控制并发事务在同时执行时的某种行为。比如,有两个事务同时操作同一张表,此时有一个事务修改了这张表的数据,但尚未提交事务,那么在另一个事务中,要不要(或者说能不能)看到其他事务尚未提交的数据呢?这个问题的答案就要看事务的隔离级别了,不同的事务隔离级别,对应的行为模式也是不一样的(有些隔离级别可以看到其他事务尚未提交的数据,有些事务隔离级别看不到其他事务尚未提交的数据),这就是事务隔离级别的作用。

知识分享官 1万+

【ESP32设备通信】-LoRaWAN网关

在物联网 (IoT) 时代,连接设备和收集数据变得比以往任何时候都更加容易和重要。 LoRaWAN(远程广域网)技术已成为远程、低功耗物联网通信的强大解决方案。 在本教程中,我们将使用 ESp32 构建 LoRaWAN 网关电路,并使用 ESP32 和 BME280 传感器构建传感器节点电路。 对于这两个电路,我们将使用基于 SX1278 (Ra-02) LoRa 模块在设备之间进行无线通信。 我们还将向您展示如何将传感器数据传输到流行的物联网平台 ThingSpeak。

视觉与物联智能 1582

什么是事务和事务隔离级别

什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换为另一种状态。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写,这四种状态的意思是: 1、原子性 即不可分割,事务要么全部被执行,要么全部不执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生变化;如果有子事务失败

weixin_44953227的博客 5742

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

事务的隔离级别有哪些

按隔离水平高低排序如下:针对不同的隔离级别,并发事务时可能发生的现象也会不同。接下来,举个具体的例子来说明这四种隔离级别,有一张账户余额表,里面有一条账户余额为 100 万的记录。然后有两个并发的事务,事务 A 只负责查询余额,事务 B 则会将我的余额改成 200 万,下面是按照时间顺序执行两个事务的行为:这四种隔离级别具体是如何实现的呢?

qq_74475840的博客 942

怀旧版电脑GBC模拟器

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

事务的4种隔离级别

当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,所以,对于不同的事务,采用不同的隔离级别会有不同的结果。 如果不考虑事务的隔离性,那么会发生下表所示的3种问题: 不可重复读是由于事务并发修改同一条记录导致的,要避免这种情况,最简单的方法就是对要修改的记录加锁,这会导致锁竞争加剧,影响性能。另一种方法是通过MVCC可以在无锁的情况下,避免不可重复读。 幻读是由于并发事务增加记录导致的,这个不能像不可重复读通...

song_myth的博客 9244

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于事务及事务隔离级别的详细讲解

什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换为另一种状态。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写,这四种状态的意思是: 1、原子性 即不可分割,事务要么全部被执行,要么全部不执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生变化;如果有子

君子慎独,不欺暗室;卑以自牧,不欺于心 2883

mysql事务隔离级别

隔离级别 MySQL是一个服务器/客户端架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session)。我们可以同时在不同的会话里输入各种语句,这些语句可以作为事务的一部分进行处理。不同的会话可以同时发送请求,也就是说服务器可能同时在处理多个事务,这样子就会导致不同的事务可能同时访问到相同的记录。我们前边说过事务有一个特性称之为...

laozhang0910的博客 8296

事务的四种隔离级别

目录1.数据库事务的隔离级别 1.数据库事务的隔离级别 由低到高分别有四种; 1.read uncommitted:读未提交,即一个事务可以读取另一个未提交事务的数据; 出现问题: 脏读:事务A读取到了事务B中未提交的数据,当事务B回滚后,事务A读取到的数据都是脏数据; 老板要给程序员发工资,程序员的工资是3.6万/月。但是发工资时老板不小心按错了数字,按成3.9万/月,该钱已经打到程序员...

107 9821

什么是事务隔离级别,事务隔离级别详解

生命中曾经有过的所有灿烂,原来终究,都需要用寂寞来偿还。 在IT行业,无论是oracle,mysql,还是postgresql数据库,为了保证数据库并发性能和数据一致性,都实现了MVCC功能(多版本并发控制)。用户通过会话访问数据库,内...

tpc4289的专栏 1870

Spring事务的隔离级别

事务隔离级别

weixin_61518137的博客 2122

事务及事务隔离级别

什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换为另一种状态。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写,这四种状态的意思是: 1、原子性 即不可分割,事务要么全部被执行,要么全部不执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生变化;如果有子事务失败

qq_43842093的博客 627
上一篇: 如何有效防止系统邮件被视为垃圾邮件
下一篇: 常用
FBugFramework
博客等级 码龄23年 25粉丝 36原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值