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

一文认识数据库事务(ACID)

什么是事务

数据库事务(Database Transaction)是数据库管理系统执行过程中的一个逻辑单位,由一系列对数据的操作组成。事务是数据库维护数据的原子性、一致性和完整性的重要机制。

ACID:Atomicity Consistency Isolation Durability(原子性、一致性、隔离性、持久性),由 Andreas Reuter 于 1983 年提出。它是数据库管理系统(DBMS)中的一个概念,它标识了一组用于保证数据库可靠性的标准属性。ACID 属性可确保所有数据库事务保持准确且一致,并支持从处理操作期间可能发生的故障中恢复。因此,几乎所有关系数据库都实现了它。

场景说明

简而言之,事务是执行的一组操作,它保证所有操作是作为一个单元執行成功或執行失败。

例如,我们将钱从支票帐户转移到储蓄帐户。这个动作实际上由两部分组成:

A. 从支票帐户中提取资金。
B. 将资金存入储蓄帐户。

正如你不希望在财务交易中发生这种情况一样,我们也不希望更新一个数据库表而没有更新引用它的表。通过使用事务,可以保证两个操作一起成功或一起失败。这样,所有涉及的实体将保持一致状态。

ACID 与事务

事务在强制实施四个 ACID 属性(Atomicity、Consistency、solation 和 Durability)中起着关键作用。
1.原子性(Atomicity)
如果无法将一个数据库操作进一步分解为不同的操作,则该数据库操作被视为原子(atomic)操作,而事务也是原子的,因为事务中发生的所有操作要么一起成功,要么一起失败。如果任何单个操作在事务过程中失败,则一切都被视为失败,并且必须撤消(回滚)到事务发生前的状态。一荣俱荣一损俱损。

2.一致性(Consistency)
使用事务的主要好处之一是,无论事务是否成功完成,它都能使数据库处于一致的状态。这确保了事务修改的数据符合列的所有约束,从而保持数据完整性。一致性是数据库处理前后的结果应与其所抽象的客观世界中真实的状况保持一致。例如:A和B两个账户总共1000元,不论怎么A怎么给B转,B怎么给A转,A和B账户合计总额始终是1000,这就是一致性。

3.隔离性(Isolation)
每个事务都与其他事务隔离。因此,一个事务不应影响同时运行的其他事务。换句话说,一个事务进行的数据修改应与其他事务进行的数据修改隔离。因此,虽然一个事务可以看到数据在其他并发事务对其进行修改之前以及完成之后所处的状态,但它看不到数据在事务中的任何状态。隔离性可以确保事务之间的独立性,避免了数据冲突的情况。

4.持久性(Durability)
事务可以通过几种方式帮助提高持久性:不管发生任何事情,一个成功的事务中发生的数据修改都可以视为已存储在数据库中。完成每个事务后,在数据库事务日志中会输入一行。因此,如果系统故障时要求从备份中还原数据库,则可以使用此事务日志将数据库恢复到事务成功后的状态。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 论文解读:Prompt-aligned Gradient for Prompt Tuning
  • Kafka配置文件 - server.properties
  • 履带式森林消防车的功能和应用_鼎跃安全
  • 【uniapp重大bug】uni-data-select的localdata改变,也会触发@change方法
  • JavaWeb——介绍(什么是Web、Web网站的开发模式)、初始Web前端(Web标准、学习内容)
  • 【C/C++】C语言中的内存分布
  • EmguCV学习笔记 VB.Net 7.2 特征点检测
  • 微服务CI/CD实践(四)Jenkins部署及环境配置
  • 「bug」nvitop ERROR: Failed to initialize curses
  • NLP从零开始------文本中阶序列处理之语言模型(完整版)
  • 网创教程自动采集wordpress插件子比主题
  • linux系统,ubuntu安装英伟达NVIDIA4090显卡驱动
  • DHCP服务异常与IP地址管理挑战
  • 我的docker随笔44:构建nginx镜像
  • Dockerfile 实例
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 10个最佳ES6特性 ES7与ES8的特性
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • javascript 哈希表
  • JAVA多线程机制解析-volatilesynchronized
  • js递归,无限分级树形折叠菜单
  • 编写高质量JavaScript代码之并发
  • 从tcpdump抓包看TCP/IP协议
  • 诡异!React stopPropagation失灵
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 为视图添加丝滑的水波纹
  • 新手搭建网站的主要流程
  • 用简单代码看卷积组块发展
  • 《天龙八部3D》Unity技术方案揭秘
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​configparser --- 配置文件解析器​
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Kafka_深入探秘者(2):kafka 生产者
  • #etcd#安装时出错
  • #QT 笔记一
  • #QT(串口助手-界面)
  • (1)(1.9) MSP (version 4.2)
  • (1)Jupyter Notebook 下载及安装
  • (2)(2.10) LTM telemetry
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三)SvelteKit教程:layout 文件
  • (十六)Flask之蓝图
  • (四)c52学习之旅-流水LED灯
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)德国人的记事本
  • (转)项目管理杂谈-我所期望的新人
  • ..回顾17,展望18
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core 6 redis操作类