当前位置: 首页 > news >正文

事务的特性-原子性(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的完整性约束机制,保证事务的一致性 

相关文章:

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

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

redis哨兵模式(Redis Sentinel)

哨兵模式的背景 当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式。 为了解决单点故障和提高系统的可用性,需要一种自动化的监…...

【牛客】牛客小白月赛97 题解 A - E

文章目录 A - 三角形B - 好数组C - 前缀平方和序列D - 走一个大整数迷宫E - 前缀和前缀最大值 A - 三角形 map存一下每个数出现了多少次&#xff0c;再遍历map #include <bits/stdc.h>using namespace std;#define int long long using i64 long long;typedef pair<…...

Spring Boot中泛型参数的灵活运用:最佳实践与性能优化

泛型是Java中一种强大的特性&#xff0c;它提供了编写通用代码的能力&#xff0c;使得代码更加灵活和可复用。在Spring Boot应用程序中&#xff0c;泛型参数的灵活运用可以带来诸多好处&#xff0c;包括增强代码的可读性、提高系统的健壮性以及优化系统的性能。本文将深入探讨在…...

MySQL建表时的注意事项

以下是我对MySQL建表时的注意事项。其实&#xff0c;建表事项有很多&#xff0c;我的总结如下&#xff1a; 1 存储引擎的选择&#xff0c;一般做开发&#xff0c;都是要支持事务的&#xff0c;所以选择InnoDB 2 对字段类型的选择&#xff1a; ​ 对于日期类型如果要记录时分…...

Advanced RAG 09:『提示词压缩』技术综述

编者按&#xff1a; 如何最大限度地发挥 LLMs 的强大能力&#xff0c;同时还能控制其推理成本&#xff1f;这是当前业界研究的一个热点课题。 针对这一问题&#xff0c;本期精心选取了一篇关于"提示词压缩"(Prompt Compression)技术的综述文章。正如作者所说&#xf…...

(13)DroneCAN 适配器节点(二)

文章目录 前言 2 固件 2.1 基于F103 2.2 基于F303 2.3 基于F431 3 ArduPilot固件DroneCAN设置 3.1 f303-通用设置示例 4 DroneCAN适配器节点 前言 这些节点允许现有的 ArduPilot 支持的外围设备作为 DroneCAN 或 MSP 设备适应 CAN 总线。这也允许扩展自动驾驶仪硬件的…...

摸鱼大数据——Spark基础——Spark环境安装——Spark Local[*]搭建

一、虚拟机配置 查看每一台的虚拟机的IP地址和网关地址 查看路径: cat /etc/sysconfig/network-scripts/ifcfg-ens33 2.修改 VMware的网络地址: 使用VMnet8 3.修改windows的对应VMware的网卡地址 4.通过finalshell 或者其他的shell连接工具即可连接使用即可, 连接后, 测试一…...

函数内部结构分层浅析(从MVC分层架构联想)

函数内部结构分层浅析&#xff08;从MVC分层架构联想&#xff09; 分层架构:一种将软件代码按不同功能进行划分的架构模式。 优点包括&#xff1a; 可维护性&#xff1a;各层职责明确&#xff0c;易于单独修改维护。 可扩展性&#xff1a;方便添加或修改某一层&#xff0c;不…...

【three.js案例二】时空隧道

import * as THREE from ./build/three.module.js // 引入轨道控制器扩展库OrbitControls.js import { OrbitControls } from three/addons/controls/OrbitControls.js; // 引入dat.gui.js的一个类GUI import { GUI } from three/addons/libs/lil-gui.module.min.js;// 场景 co…...

动手学深度学习(Pytorch版)代码实践 -计算机视觉-48全连接卷积神经网络(FCN)

48全连接卷积神经网络&#xff08;FCN&#xff09; 1.构造函数 import torch import torchvision from torch import nn from torch.nn import functional as F import matplotlib.pyplot as plt import liliPytorch as lp from d2l import torch as d2l# 构造模型 pretrained…...

【Python游戏】猫和老鼠

本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结一、前言 本文介绍如何使用Python的海龟画图工具turtle,开发猫和老鼠游戏。 什么是Python? Python是由荷兰人吉多范…...

【无标题】c# WEBAPI 读写表到Redis

//c# WEBAPI 读写表到Redis using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using Newtonsoft.Json; using StackExchange.Redis; using System.Data; using System.Web; namespace …...

【剑指Offer系列】53-0到n中缺失的数字(index)

给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1&#xff1a; 输入&#xff1a;nums [3,0,1] 输出&#xff1a;2 解释&#xff1a;n 3&#xff0c;因为有 3 个数字&#xff0c;所以所有的数字都在范围 [0,3]…...

docker compose部署zabbix7.0官方方法快速搭建

环境介绍&#xff1a; 系统&#xff1a;centos7 官方文档&#xff1a;https://www.zabbix.com/documentation/current/zh/manual/installation/containers docker镜像加速 vi /etc/docker/daemon.json{"registry-mirrors": ["https://docker.1panel.live&quo…...

分库分表之后如何设计主键ID(分布式ID)?

文章目录 1、数据库的自增序列步长方案2、分表键结合自增序列3、UUID4、雪花算法5、redis的incr方案总结 在进行数据库的分库分表操作后&#xff0c;必然要面临的一个问题就是主键id如何生成&#xff0c;一定是需要一个全局的id来支持&#xff0c;所以分库分表之后&#xff0c;…...

秋招突击——6/28、6.29——复习{数位DP——度的数量}——新作{}

文章目录 引言复习数位DP——度的数量个人实现参考实现 总结 引言 头一次产生了那么强烈的动摇&#xff0c;对于未来没有任何的感觉的&#xff0c;不知道将会往哪里走&#xff0c;不知道怎么办。可能还是因为实习吧&#xff0c;再加上最近复习也没有什么进展&#xff0c;并不知…...

Spring Boot中使用Thymeleaf进行页面渲染

Spring Boot中使用Thymeleaf进行页面渲染 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中使用Thymeleaf模板引擎进行页面…...

恢复策略(下)-事务故障后的数据库恢复、系统故障后的数据库恢复(检查点技术)、介质故障后的数据库恢复

一、数据库恢复-事务故障 系统通过对事物进行UNDO操作和REDO操作可实现故障后的数据库状态恢复 1、对于发生事务故障后的数据库恢复 恢复机制在不影响其他事务运行的情况下&#xff0c;强行回滚夭折事务&#xff0c;对该事务进行UNDO操作&#xff0c;来撤销该事务已对数据库…...

如何知道docker谁占用的显卡的显存?

文章目录 python环境安装nvidia-htop查看pid加一个追踪总结一下【找到容器创建时间】使用说明示例 再总结一下【用PID找到容器创建时间&#xff0c;从而找到谁创建的】使用说明示例 python环境安装nvidia-htop nvidia-htop是一个看详细的工具。 pip3 install nvidia-htop查看…...

知识更新的未来:AI原生应用如何实现自我进化?

知识更新的未来:AI原生应用如何实现自我进化? 关键词:知识更新、AI原生应用、自我进化、机器学习、数据驱动 摘要:本文深入探讨了在知识快速更新的未来,AI原生应用实现自我进化的相关内容。从核心概念的解释到实现自我进化的算法原理、数学模型,再到项目实战、实际应用场…...

Hive【从SQL到MapReduce:核心架构与执行引擎深度解析】

1. Hive的核心角色&#xff1a;SQL到分布式计算的翻译官 第一次接触Hive时&#xff0c;很多人会疑惑&#xff1a;为什么要在Hadoop生态中引入这样一个"类SQL"工具&#xff1f;这要从大数据处理的痛点说起。想象你面前有一本百万页的百科全书&#xff0c;现在需要统计…...

AI专著写作指南:深度剖析热门工具,助你专著创作一步到位

撰写学术专著的挑战与AI解决方案 撰写学术专著是一项严峻的挑战&#xff0c;它不仅考验着研究者的学术能力&#xff0c;还对心理承受能力提出了很高的要求。与论文写作常常可以依赖团队的支持不同&#xff0c;专著的创作更多的是独立作战。从选题到框架设计&#xff0c;再到细…...

几何完备扩散模型GCDM:从理论突破到SBDD实战评测与部署指南

1. 几何完备扩散模型GCDM的核心突破 第一次看到GCDM论文时&#xff0c;我被它解决3D分子生成痛点的思路惊艳到了。传统方法就像用2D积木搭3D建筑——EDM等模型依赖的EGNN网络只能处理距离信息&#xff0c;而GCDM引入的GCPNET架构彻底改变了游戏规则。这个改进相当于给模型装上了…...

为什么说Applio是解决复杂语音克隆难题的终极解决方案?

为什么说Applio是解决复杂语音克隆难题的终极解决方案&#xff1f; 【免费下载链接】Applio Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience. 项目地址: https://gitcode.com/gh_mirrors/ap/Applio …...

3步搞定AtlasOS系统技术故障:Xbox控制器驱动完全解决方案

3步搞定AtlasOS系统技术故障&#xff1a;Xbox控制器驱动完全解决方案 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/at…...

从零开始:Linux系统部署AI视频生成工具Sora.FM的实战指南

从零开始&#xff1a;Linux系统部署AI视频生成工具Sora.FM的实战指南 【免费下载链接】sorafm 项目地址: https://gitcode.com/GitHub_Trending/so/sorafm 在数字化内容创作领域&#xff0c;AI视频生成技术正在引领一场新的革命。Sora.FM作为基于Sora AI技术的创新平台…...

华三M-LAG实战:从零构建高可用数据中心网络

1. 为什么数据中心需要M-LAG技术&#xff1f; 刚接手数据中心网络建设项目时&#xff0c;我最头疼的就是如何实现高可用性。传统方案要么成本太高&#xff0c;要么切换速度达不到要求。直到接触华三的M-LAG技术&#xff0c;才发现原来跨设备链路聚合可以这么玩。 M-LAG全称Mult…...

告别官方驱动:深入解读ES7210寄存器,打造你自己的ESP32音频采集库

告别官方驱动&#xff1a;深入解读ES7210寄存器&#xff0c;打造你自己的ESP32音频采集库 在嵌入式音频开发领域&#xff0c;ES7210作为一款高性能多通道麦克风ADC芯片&#xff0c;因其出色的信噪比和灵活的配置选项&#xff0c;成为ESP32平台上音频采集的热门选择。然而&#…...

RWKV7-1.5B-g1a开源模型优势:无依赖离线加载+低维护成本

RWKV7-1.5B-g1a开源模型优势&#xff1a;无依赖离线加载低维护成本 1. 模型简介 rwkv7-1.5B-g1a 是基于新一代 RWKV-7 架构的开源文本生成模型&#xff0c;专为轻量级应用场景设计。这个1.5B参数的模型在多语言处理上表现出色&#xff0c;特别适合以下场景&#xff1a; 基础问…...