事务的特性-原子性(Atomicity)、一致性(Consistency)、隔离性(Asolation)、持久性(Durability)

一、引言

1、数据库管理系统DBMS为保证定义的事务是一个逻辑工作单元,达到引入事务的目的,实现的事务机制要保证事务具有原子性、一致性、隔离性和持久性,事务的这四个特性也统称为事务的ACID特性

2、当事务保持了ACID特性,才能使数据库从一个一致性的状态转为另一个一致性的状态

3、数据库的一致性

  • 数据库的当前实例数据也称为数据库状态
  • 用户在数据库中的操作,主要是对数据库的状态值进行查询和更新,每个操作后的数据库状态,正是下一个操作的数据库的作用状态,也就是用户对数据库的操作使数据库从一个状态转变为另一个状态
  • 假设数据库的状态企业的当前业务状态相一致,是一个一致性状态,如果在事务执行过程中,硬件和软件都不出现错误,则事务执行结果不会产生不能解释的数据库状态值。数据库状态能反映用户对数据库的操作,则我们称事务使数据库保持一致性,数据库处于一致性状态

4、数据库可能会在事务执行过程的某一时刻处于不一致的状态,但在事务结束后应处于一致性状态 

二、原子性(Atomicity)

1、 事务的原子性是指事务作为数据库系统的逻辑工作单元,事务中的所有数据库操作是不可分割的

2、事务必须作为整体执行或根本不执行,即事务中包括的所有操作,要么都执行完,要么就根本没有执行,事务的这种“全或无”的特性,称为事务的原子性

3、事务的原子性要求每个事务要么提交,要么因异常终止而回滚。如果事务没有执行完成,其结果就像它根本没有执行一样。

对于该银行转账事务,事务的原子性要求,要么从账户A支出1000元存入账户B中,要么没有从账户A支出,账户B也没有进账,而不能只从账户A支出却没有存入账户B中。

若从账户A支出1000元,但在存入账户B前,事务夭折,比如强行终止事务。可看出终止事务前已从A账户中支出1000元,但还没有存入账户B中

begin transaction
select * from accounts;update accounts
set balance=balance-1000
where acctNo='A'; /* 从账户A中减去1000元 */select * from accounts;

终止事务后,事务不能继续执行 ,前面执行的所有更新操作结果也被DBMS撤销了,数据库中数据的值为事务执行前的值

select * from accounts;

三、一致性(Consistency)

1、事务的一致性是指事务从一个一致的数据库状态开始独立地执行,则事务结束时,数据库也必须再次处于一致性状态,即事务必须保证数据库的一致性

  • 这种一致性不仅包括要满足数据库设计者指定的完整性约束
  • 还要正确反映事务成功提交的结果,使数据库的状态与企业状态一致

对于这个银行转账事务,事务的一致性要求事务的执行不能改变账户A和账户B的资金总额,即应用程序员在编写事务时要确保账户A的支出和账户B存入的资金相等。同时如果数据库设计时要求不能透支转账,即当事务执行的时候,从账户A支出1000元后余额小于0,则事务的执行应该被阻止,满足数据库的完整性约束 

set xact_abort  ON;
begin transaction;select * from accounts;update accounts
set balance=balance-1000
where acctNo='A';   /* 从账户A中减去1000元*/update accounts
set balance=balance+1000
where acctNo='B';   /* 从账户B中加上1000元*/select * from accounts;commit;

2、确保单个事务的一致性是编写该事务的应用程序员的职责,可通过定义一致性约束,来阻止任何违反约束的事务的执行

SET XACT_ABORT ON;

 这一行时针对SQL Server数据库的一个设置命令,用于控制事务处理中的错误处理行为,当 XACT_ABORT设置为ON是,它会影响SQL Server在事务中遇到错误时的行为

(1)即时终止:当一个错误发生时(比如约束冲突、数据类型不匹配等),当前批处理将立即停止执行,而不仅仅在遇到错误的语句上停止。这意味着即是错误发生在事务中间,后续的SQL语句也不会被执行

(2)自动回滚:在批处理因错误终止时,如果当前处于事务中,这个事务会自动被自动回滚,回归到事务开始签的状态,确保数据的一致性

(3)减少不确定状态:使用SET XACT_ABORT ON可以减少数据库中因部分事务执行而可能导致的数据不一致问题,因为它确保了要么整个事务成功,要么完全不改变数据库状态

四、隔离性(Asolation)

1、隔离性是事务在并发执行时应具有的特性。如同在操作系统中允许多个进程并发执行来提高系统资源的利用率一样

2、在多用户的现代数据库系统中,系统有能力同时并发执行多个事务,来提高系统的事务吞吐量,减少事务等待时间充分发挥数据库共享资源的特点

3、一个事务可能同时包含多个数据库操作,多个事务同时并发执行,则不同事务间的数据库操作可能会交错执行并可能对同一个数据库对象进行操作 

事务作为一个逻辑工作单元,在用户看起来,事务内的操作是不能被其他不属于该事务的数据库操作分隔开的

4、事务的隔离性就是指一个事务正常执行不被来自并发执行的事务中的数据库操作所干扰的特性

5、每个事务都应感觉不到系统中有其他事务在并发地执行

比如大家经常会在12306网站订票,甚至是抢票,我们的每个预定操作对系统来说就是一个并发的事务,系统会保证事务间的隔离性,当两个人分别用手机登录自己的账户同时抢同一车次的一张余票时,只会让一个人预定到,而在数据库管理系统没有实现事务机制前,则可能会出现两个人抢到同一座位的情况

五、持久性(Durability)

1、事务的持久性也称永久性

2、是指一个事务一旦提交,它对数据库中数据的更新就应持久地保存在数据库中

3、后序的其他操作或系统故障等,不应该其执行结果有任何影响

对于银行转账事务,事务的持久性要求当事务提交后,即客户确认转账成功并离开,不管银行的操作计算机或存放数据库的磁盘出现任何故障,都不会引起与这次转账相关的数据丢失

set xact_abort  ON;
begin transaction;select * from accounts;update accounts
set balance=balance-1000
where acctNo='A';   /* 从账户A中减去1000元*/update accounts
set balance=balance+1000
where acctNo='B';   /* 从账户B中加上1000元*/select * from accounts;commit;select * from accounts;

六、小结

执行的事务保持ACID特性是数据库保持一致性的前提,由于并发执行的事务会破坏事务的隔离性,系统出现的各类故障会破坏事务的原子性和持久性,数据库管理提供DBMS必须对事务进行处理,对并发执行的事务进行并发控制,保证事务的隔离性,对发生故障后系统中的事务更新结果进行恢复保证事务的原子性和持久性。此外,利用DBMS的完整性约束机制,保证事务的一致性 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【精选】数据治理项目实施(合集)06——数据标准在数据治理中的落地实践

导读 本文对数据标准管理进行了深入探讨。重点介绍了数据标准的定义,实施路线和具体标准定义的内容,并总结了企业开展数据标准管理面临的常见问题,由于编写的水平和时间有限, 难免有所纸漏, 欢迎大家批评指正。 在现实…

MyBatis-关联查询的对象是集合的处理

用户和角色之间是多对多的关系,也就是说,一个用户可以有多个角色与之绑定,所以在User对象中,角色的属性就必须是一个集合Set或者List,这里我们就用List集合在做例子: 1.怎么在Mybatis中实现关联的List集合对…

k8s流控平台apiserver详解

一、简单理解认识apiserver 1.主要功能 认证 鉴权 准入 mutating validating admission 限流 2.概念 apiserver保护etcd,缓存机制,有缓存直接返回,没缓存再去查看etcd,apiserver是担任和其他平台同信并认证 3.访问控制概览…

精益生产KPI指标分析与管理系统,助力企业挖掘数据黄金焕发第二生命线

智慧工厂精益生产追求以越来越少的投入获取越来越多的产出,通过消除浪费、提高效率来实现生产效益的最大化。精益生产强调量化管理,通过与KPI的结合,可以将生产过程中的关键数据进行量化和分析,推动企业各部门更加关注运营效率&am…

嵌入式Linux的浮点运算能力测试

嵌入式Linux的浮点运算能力测试 今天需要对一款ARM CPU的浮点数运算能力进行测试,采用了台式机上常用的SuperPI相同的原理:计算一定小数位数的圆周率来测试硬件的浮点数计算能力和稳定性。 首先下载计算软件的源代码,可以使用下面命令&#…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(转换、拆分、分割、连接、替换、查找、“Like“)

字符串分割,文末示例(文末代码3附有源码) 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

NetSuite 隐藏功能之Memorized Transactions记忆交易

本周功课结束,想说说Memorized Transactions这个有时会被忽略的功能,顾名思义,记忆交易就是可以将一个原始的Transaction在创建后进行“记忆”,以保证后续可以在固定日期(周期性日期或者自定义日期)产生“被…

CISCN--西南半决赛--pwn

1.vuln 这是主函数,数一下就发现可以溢出最后的0x4008d0 然后会执行到这里,逻辑就是在v0上写shellcode,不过执行写0x10,不够sh,很明显要先read。 以下是exp: from pwn import * context.archamd64 ioprocess(./vuln)…

一大波客户感谢信来袭,感谢认可!

“自美的置业数据中台项目启动以来,贵公司实施团队与服务运营始终以专业、敬业、合作的态度扎根用户、服务用户、与用户共成长。在此,我司表示由衷的感谢!” 这是携手美的置业以来,我们收到的第二封客户感谢信。 △ 以上为美的置…

Windwos +vs 2022 编译openssl 1.0.2 库

一 前言 先说 结论&#xff0c;编译64位报错&#xff0c;查了一圈没找到解决方案&#xff0c;最后换了32位的。 使用qt访问web接口&#xff0c;因为是https&#xff0c;没有openssl库会报错 QNetworkReply* reply qobject_cast<QNetworkReply*>(sender());if (reply){…

《数据仓库与数据挖掘》 总复习

试卷组成 第一章图 第二章图 第三章图 第四章图 第五章图 第六章图 第九章图 第一章 DW与DM概述 &#xff08;特点、特性&#xff09; DB到DW 主要特征 &#xff08;1&#xff09;数据太多&#xff0c;信息贫乏&#xff08;Data Rich&#xff0c; Information Poor)。 &a…

2024最新美区TikTok选品全流程指南

打造TikTok爆款&#xff0c;3分靠运营&#xff0c;7分靠选品。 选择适合TikTok推广的商品至关重要&#xff0c;针对TikTok美区如何选品&#xff1f;怎么定价&#xff1f;SKU定多少&#xff1f; 本文总结出独家「美区TikTok选品全流程指南」方法论&#xff0c;说清楚选品最重要…

【项目一】全场景工业互联设备管理系统解决方案(PC上位机+中控+多传感器) 文章汇总

全场景工业互联设备管理系统解决方案(PC上位机中控多传感器) 配套硬件及资料 配套资料&#xff1a;https://pan.baidu.com/s/109e9Cr5nl-BWpct24Q6zOw?pwdroot 密码&#xff1a;root 交流论坛&#xff1a;https://forums.100ask.net/c/specialc/85 QQ交流群&#xff1a;865…

深入理解 XML 和 HTML 之间的区别

在现代网络技术的世界中&#xff0c;XML&#xff08;可扩展标记语言&#xff09;和 HTML&#xff08;超文本标记语言&#xff09; 是两个非常重要的技术。尽管它们都使用标签和属性的格式来描述数据&#xff0c;但它们在形式和用途上有显著的区别。 概述 什么是 XML&#xff…

告别 “屎山” 代码,务必掌握这14 个 SpringBoot 优化小妙招

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

【论文阅读 Validation Free and Replication Robust Volume-based Data Valuation】

论文题目 免验证的对于复制鲁棒性的基于量的数据估值 1. 本文具体贡献 通过数据的体积形式化了数据多样性的度量&#xff0c;并在理论上和实证上证明了体积对数据估值的适用性&#xff1b;形式化了复制鲁棒性的概念&#xff0c;并设计了一种基于稳健体积&#xff08;RV&…

分布式服务测试各节点调用第三方服务连通性

背景&#xff1a;分布式部署 一个主节点往各个节点下发任务&#xff08;调用第三方服务&#xff09;&#xff0c;目的是为了测试各节点与第三方的连通性 思路&#xff1a; 主节点实现 创建Spring Boot项目&#xff1a;作为主节点的后端服务。 集成Eureka客户端&#xff1a;在…

Android 遥控器

遥控器源码 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RadialGradient; import android.graphics.Region; import android.g…

个微API二次开发

通过 E云API 可以实现 个性化微信功能 &#xff08;例&#xff1a;营销系统、云发单助手、社群管家webot、客服系统等&#xff09;&#xff0c;用来自动管理微信消息。 可开发的功能包括但不限于&#xff1a; 好友管理&#xff1a; 添加好友、删除好友、修改备注、创建标签、获…

云动态摘要 2024-06-28

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [新客专享]WeData 限时特惠 腾讯云 2024-06-21 数据分类分级管理&#xff0c;构建数据安全屏障 &#xff0c;仅需9.9元&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器…