事务的特性及隔离级别

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署 本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。 阅读详情
       本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。

  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:

⑴ 原子性(Atomicity)

  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

⑵ 一致性(Consistency)

  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

  拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

⑶ 隔离性(Isolation)

  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

  即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

  关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。

⑷ 持久性(Durability)

  持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

  例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务已经正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。

 ---

  以上介绍完事务的四大特性(简称ACID),现在重点来说明下事务的隔离性,当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,在介绍数据库提供的各种隔离级别之前,我们先看看如果不考虑事务的隔离性,会发生的几种问题:

1,脏读

  脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

  当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。例如:用户A向用户B转账100元,对应SQL命令如下

    update account set money=money+100 where name=’B’;  (此时A通知B)

    update account set money=money - 100 where name=’A’;

  当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时即发生了脏读),而之后无论第二条SQL是否执行,只要该事务不提交,则所有操作都将回滚,那么当B以后再次查看账户时就会发现钱其实并没有转。

2,不可重复读

  不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

  例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。

  不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。

  在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,例如对于同一个数据A和B依次查询就可能不同,A和B就可能打起来了……

3,虚读(幻读)

  幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

  幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

 

  现在来看看MySQL数据库为我们提供的四种隔离级别:

  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。——幻读,MySQL的默认

  ③ Read committed (读已提交):可避免脏读的发生。——大多数数据库系统的默认隔离级别(但不是MySQL默认的)

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。——脏读

 

  以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。像Serializable这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况。在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。

  在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

  在MySQL数据库中查看当前事务的隔离级别:

    select @@tx_isolation;

  在MySQL数据库中设置事务的隔离 级别:

    set  [glogal | session]  transaction isolation level 隔离级别名称;

    set tx_isolation=’隔离级别名称;’

例1:查看当前事务的隔离级别:

  

例2:将事务的隔离级别设置为Read uncommitted级别:

  

或:

  

记住:设置数据库的隔离级别一定要是在开启事务之前!

  如果是使用JDBC对数据库的事务设置隔离级别的话,也应该是在调用Connection对象的setAutoCommit(false)方法之前。调用Connection对象的setTransactionIsolation(level)即可设置当前链接的隔离级别,至于参数level,可以使用Connection对象的字段:

  

在JDBC中设置隔离级别的部分代码:

  

  后记:隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection对象设置的隔离级别只对该Connection对象有效,与其他链接Connection对象无关。

ABAQUS地应力平衡方法详解 在岩土工程数值分析中,首先要对模型进行初始地应力平衡计算。ABAQUS有限元软件有五种初始地应力平衡方法:①自动平衡法;②关键字定义初始地应力法(或在界面操作);③ODB导入法;④初始应力提取法;⑤用户子程序SIGNI法。由于第五种方法需要一定的编程基础,操作起来太复杂不易掌握,故本文只讲解较为实用的前四种平衡方法。 地应力平衡的目标:使土层在自重作用下的变形很小----不存在初始位移,只存在初始应力。一般情况下,最大位移达到10-4次幂以下就可以了。 ①自动平衡法 (如果土体采用线弹性,且比较规则, 阅读详情

相关推荐

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9930

事务的四个特性以及四个隔离级别

数据库中的事务有四大特性(ACID),分别是原子性、一致性、隔离性和持久性。针对隔离性,还有四个隔离级别,分别是串行化、可重复读、读已提交和读未提交。这四个隔离级别是针对并发事务中存在的三个问题,分别是脏读、不可重复读和幻读。

qq_36820996的博客 2802

二元交叉熵:分类模型概率校准的数学根基

二元交叉熵(BCE)是二分类任务中实现概率校准的核心损失函数,其本质源于最大似然估计与KL散度,确保模型输出具备真实可解释的概率意义。相比均方误差(MSE)或Hinge Loss,BCE强制优化预测分布与真实伯努利分布之间的信息差异,使p=0.8真正对应约80%的正例发生率,支撑风控、医疗、推荐等高信度场景的阈值决策。它不只影响训练收敛,更决定部署后概率的业务可信度——这正是Focal Loss等变体无法替代其基础地位的根本原因。理解BCE,就是理解分类模型如何从‘打分器’进化为‘概率契约签署者’。

congli3478的博客 1333

事务的特性和隔离级别

ACID特性确保了数据库事务的可靠性和数据的完整性。原子性保证了事务的不可分割性,一致性保证了事务执行前后数据库的完整性,隔离性保证了并发事务的正确性,持久性保证了事务提交后的永久性。这些特性共同作用,使得数据库在复杂的操作和并发环境下仍然能够保持数据的一致性和可靠性。

孙小鸿的博客 975

PTA 编程题(C语言)-- 然后是几点

PTA 编程题(C语言)-- 然后是几点

LCCprogrammer 5078

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改

本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。

weixin_27303545的博客 1133

MySQL事务的四大特性及事务的隔离级别

MySQL事务的四大特性及事务的隔离级别事务的概念事务的四大特性ACIDAtomicity:原子性Consistency:一致性Isolation:隔离性Durability:持久性事务的隔离级别Read UncommittedRead CommittedRepeatable ReadSerializable隔离级别产生的问题脏读不可重复读幻读MySQL操作隔离级别查看事务隔离级别修改事务隔离级别...

huokundian的博客 1088

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 872

Spring 事务隔离级别 事务传播特性 @Transactional使用

spring的事务处理能力,本质上是数据库提供的。 一个数据库具备事务,那么它必然支持4个特性, 事务的4大特性 原子性 一致性 隔离性 持久性 这4个特性,保证了数据库处理单事务是有保障的,正确的。更多应用处理场景下,是多事务并行出现的。同时,两个或两个以上的事务,操作同一张表,就会引起冲突。为了解决事务间交互产生的问题,数据库设置了4个隔离级别 数据库的4大隔离级别 ...

chudaxiakkk的专栏 9115

Git救援:如何从误操作中恢复未提交的更改

摘要:本文探讨了误操作git reset --hard导致未提交更改丢失后的恢复方法。首先分析git reflog的局限性,随后介绍利用IDE本地历史记录(如IntelliJ IDEA和VS Code)进行文件恢复的具体步骤。最后建议使用文件系统恢复工具(如Linux的extundelete或Windows的Recuva)作为备选方案。文章强调定期提交的重要性,同时提供了意外发生时可行的恢复策略,帮助开发者尽可能挽回丢失的工作内容。(149字)

2501_90323865的博客 129

轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)

共轭梯度法的核心原理是求解优化问题的共轭向量组作为优化方向,由于优化方向间彼此正交,故每次迭代只需沿着一个方向寻优而互不影响。本文设计基于ESDF的障碍约束、曲率约束和平滑约束,基于ROS C++和Python提供了共轭梯度法的轨迹优化实践案例

FRIGIDWINTER的博客 1万+

Spring事务的传播特性以及事务的隔离级别

Spring事务的传播特性以及事务的隔离级别,超时,只读

Kiss键 364

AMBA-CHI协议详解(五)

 每个事务由许多不同的packets组成,这些数据包通过互连(interconnect)传输。packets内的一组ID域段用于提供有关包的附加信息。

Crazzy_M的博客 1961

事务的四大特性以及隔离级别详解

事务的四大特性(ACID) 今天操作Mysql数据库的时候突然想起了事务,然后就有了现在,首先我们来谈谈事务的四大特性吧。 1. 原子性(Atomicity) 所谓事务的原子性,用一句话概括就是指的是事务中包含的所有操作,要不全部成功要不全部失败并回滚。事务是数据库的逻辑和工作单位。 2. 一致性(Consistency) 然后是事务的一致性,指的是事务必须从一个一致性状态转换到另一个一致性状态,...

橙子君的博客 3969

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[MySQL八股]事务特性、隔离级别、MVCC

这一篇内容比较多,也比较难懂,大家下去可以多消化一下。根据博主的经验,特别是MVCC这一块被问得很多,如果说不清,说得没有逻辑,在面试中肯定是会扣分。所以我们要形成自己的理解链条,能够保证在面试的高压中能够用清晰的条理去回答问题,而不是死记硬背。----本文图片与文字部分参考黑马程序员。

weixin_51282703的博客 1108

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

什么是事务、事务特性、事务隔离级别、spring事务传播特性

1.什么是事务: 事务是指程序中的一个操作序列。其特点是:该序列的所有操作要么全部成功完成,要么只要有一个操作失败,则该序列所有操作都将被撤销。这也是事务的原子性(要么成功,要么失败)。 2.事务特性: 事务特性分为四个:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)简称ACID。 原子性(Atomicity):...

sinolover的专栏 525

事务的特性以及事务的隔离级别

事务的特性以及事务的隔离级别什么是事务事物的四个特性(ACID)并发事务导致的问题数据库事务的隔离级别 本文转载至:https://www.cnblogs.com/Kevin-ZhangCG/p/9038371.html 什么是事务 事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大...

SKYFREEDEM的博客 959

事务——什么是事务,事务的特性,事务的隔离级别

什么是事务,事务的特性,事务的隔离级别

醉酒的戈多的专栏 8800

事务的四大特性及隔离级别

幻读是事务非独立执行时发生的一种现象。例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

日常工作记录,解决实际问题,不成体系。 1002

事务四大特性、隔离级别和传播特性

事务四大特性ACID A 原子性:原子性指的是 在一组业务操作下 要么都成功 要么都失败 在一组增删改查的业务下 要么都提交 要么都回滚 C 一致性:事务前后的数据要保证数据的一致性 在一组的查询业务下 必须要保证前后关联数据的一致性 I 隔离性:在并发情况下 事物之间要相互隔离。 D 持久性:数据一旦保存就是持久性的。 @Transactional注解应该写在哪 @Transactional 可以标记在类上面(当前类所有的方法都运用上了事务) @Transactional 标记在方法

春风化雨的博客 1795

什么是事务?事务的四个特性以及事务的隔离级别

什么是事务   事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大家同在一条船上,要活一起活,要完一起完 。 事物的四个特性(ACID)   ●原子性(Atomicity):操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令...

asrglx8740的博客 2882

深入解析数据库事务的ACID特性与事务隔离级别

理解事务的 ACID 特性以及不同的事务隔离级别,对于开发高效、可靠的数据库应用至关重要。在并发环境下,事务隔离级别决定了数据的可见性和一致性,开发者需要根据具体场景权衡事务的隔离性与性能。虽然提供最强的隔离,但可能导致性能问题,因此在实际应用中,常常需要选择一个合适的隔离级别,平衡性能与数据一致性。通过了解并发问题(脏读、不可重复读和幻读),我们能够在数据库设计中做出合理的决策,确保数据的正确性和应用的高效性。

一碗黄焖鸡三碗米饭的博客 1309

数据库的事务的基本特性,事务的隔离级别,事务隔离级别如何在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

Spring 事务传播特性和隔离级别

Spring 事务传播特性和隔离级别 事务是处理逻辑原子性的保证,作为单个逻辑单元执行一系列操作,要么执行完成要么全部不执行。事务遵循ACID四个特性。 事务的两个重要特性是,事务的传播特性和事务的隔离级别特性。传播级别决定了事务的控制范围,事务隔离级别决定了事务在数据库读写方面的控制范围。 原子性:事务作为一个原子整体,要么执行要么完全不执行 一致性:事务保证数据库状态从一个一致性变为另一...

古月的博客 1002

事务的特性,隔离级别,以及事务的传播行为

事务:事务就是逻辑上的一组操作,要么全部成功,要么全部失败。在事务执行的过程中能出现任何问题,若出现问题整个事务都会执行失败,恢复原来的样子。 事务的特性: ACID: 1:原子性:指的是事务是一个整体是不可分割的。 2:一致性:指的是事务执行的前后,数据的完整性保持一致。 3:隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的(一个事务执行的时候,不受到其他事务的干扰) 4:持久性:...

qq_41942241的博客 199

Sql(MySQL事务四大特性、事务隔离级别)

Sql(MySQL事务四大特性、事务隔离级别)

轻言细语莫泪痕 1106
上一篇: maven中的scope属性
下一篇: 谈Spring事务隔离级别
南哥220
博客等级 码龄9年 2粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值