什么是ACID?它的特性是什么?

article/2025/9/29 21:33:21

https://baijiahao.baidu.com/s?id=1743501877867119042&wfr=spider&for=pc

ACID是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。也因此,ACID就是数据库事务正确执行的四个基本要素的缩写。

根据《DDIA》一书中给出的定义,ACID可以这样理解:

原子性(Atomicity):原子性实际描述的是同一个客户端对于多个操作之间的限制,这里的原子表示的是不可分割,原子性的效果是,假设有操作集合{A,B,C,D,E},执行后的结果应该和单个客户端执行一个操作的效果相同。

简单说,一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。


 

一致性(Consistency):表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。这个名词在不同语境中含义会不同,但可能又有联系,这就可能让我们陷入混乱。

比如,数据复制时,副本间具有一致性,这个一致性应该指不同副本状态的一致;一致性Hash,这是一种分区算法,个人理解是为了能够在各种情况下这个Hash算法都可以以一致的方式发挥作用;CAP定理中的一致性指的是后面要介绍的一个特殊的内部一致性,称为“线性一致性”。

隔离性(Isolation):隔离性实际上解决的问题是多个事务作用于同一个或者同一批数据时的并发问题,防止由于交叉执行而导致数据的不一致。一个完美的事务隔离,在每个事务看来,整个系统只有自己在工作,对于整个系统而言这些并发的事务一个接一个的执行,也仿佛只有一个事务,这样的隔离成为“可序列化(Serializability)”。当然,这样的隔离级别会带来巨大的开销,因此出现了各种各样的隔离级别,进而满足不同场景的需要。

持久性(Durability): 只要事务完成,不管发生任何问题,都不应该发生数据丢失。即,事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。从理论上讲,如果是单机数据库,起码数据已被写入非易失性存储(至少已落WAL),分布式系统中数据被复制到了各个副本上,并受到副本Ack。但实际情况下,也未必就一定能保证100%的持久性。

另外,在上述内容中频繁出现的“事务”,其实际产生于系统中所遇到的各种各类的问题。比如,程序依托的操作系统层,硬件层可能随时都会发生故障;应用程序可能会随时发生故障;因网络中断,切断客户端与服务端的链接或数据库之间的链接;多个客户端可能会同时访问服务端,并且更新统一批数据,导致数据互相覆盖(临界区);客户端可能会读到过期的数据,等等。

事务的核心使命就是尝试解决上述提到的那些问题,并以从它自己层面所看到的安全性保证,让使用者在访问存储系统时只关注其本身的写入和查询逻辑,而非去处理那些问题。而事务的解决方式,也恰恰是通过ACID特性来进行保证的。


http://chatgpt.dhexx.cn/article/VanYSNko.shtml

相关文章

事务ACID理解

事务管理(ACID) 谈到事务一般都是以下四点 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务前后数据…

vue页面刷新 reload()

首先在vue里配置 在所想添加reload的vue里直接如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190610082256841.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTAxMTkxMA…

重识Nginx - 16 Nginx reload流程浅析

文章目录 图解reload流程1.向master程发送HUP号( reload命令)2.master进程校验配置语法是否正确3.master进程打开新的监听端口4.master进程用新配置启动新的worker 进程5.master进程向老worker 进程发送QUIT号6.老worker进程关闭监听句柄,处理完当前连接后结束进程 图解reload流…

vue this.reload 方法 配置, 优于window.reload()的页面刷新

相关网址: https://www.cnblogs.com/yinn/p/9056731.html 1.场景 在处理列表时,常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 1. 用vue-router重新路由到当前页面,页面是不进行刷新的 2.采用window.re…

Nginx reload

解释 /usr/local/nginx/sbin/nginx -s reload 用过多次这条命令,一直以为是重启Nginx,今天有幸看了下Nginx官方文档介绍这条命令 Nginx服务不会终止,主进程检查配置,应用配置的过程。主进程会启动一个新的工作进程处理新来的请求…

layui table.reload()

使用table.reload()重载去搜索特定列 html <div class"searchTable" id"searchTable"><div class"layui-inline"><input class"layui-input layui-inline" id"badge" placeholder"badge" autoc…

为什么 NGINX 的 reload 命令不是热加载?

这段时间在 Reddit 看到一个讨论&#xff0c;为什么 NGINX 不支持热加载&#xff1f;乍看之下很反常识&#xff0c;作为世界第一大 Web 服务器&#xff0c;不支持热加载&#xff1f;难道大家都在使用的 nginx -s reload 命令都用错了&#xff1f;带着这个疑问&#xff0c;让我们…

Unity 手动编译 Reload脚本 减少等待时间

Unity 手动编译 Reload 脚本 这是个自定义reload domain工具,加快工作流,减少等待.测试版本是Unity2021,理论上来说2020以上都可. 脚本地址:UnityManualReload (github.com) 在Unity中遇到的问题 在unity工作流中,修改脚本->编译脚本->reload domain(重载域)-> 进…

layui table reload 重载

在所有记录中通过姓名搜索需要的数据&#xff0c; 搜索记录为空时返回所有记录 HTML&#xff1a; 方法渲染table&#xff1a; 表格重载&#xff1a; reload将再次访问servlet 第一次访问&#xff1a; reload访问&#xff1a; ennn&#xff0c;然后就是后台操作了&#xff0c;我…

搬运 auto_reload preload

原文&#xff1a; STM32CubeMX配置时钟中的auto-reload precload_飞由于度的博客-CSDN博客 STM32的定时器开发基础的时候&#xff0c;产生了一个疑问&#xff0c;这里不需要使能自动重装载吗&#xff1f; 带着这个疑问我去查了一下《STM32 HAL 库开发实战指南》&#xff0c;在…

4、Nginx命令(reload很重要)

Nginx命令&#xff08;reload很重要&#xff09; ./nginx -s reload &#xff1a;当我们更改了配置文件&#xff0c;我们都要重新加载我们的配置文件也就是reload例如我们的更改端口号变80位8080 连接不上的操作

js 刷新当前页面的方法 reload() , replace()的简单使用

本文为大家介绍三种 js 刷新当前页面的方法&#xff0c;我是在vue实例下写的&#xff1a; 添加定时器是为了直观看到刷新效果&#xff08;每次刷新都会重置为0&#xff09;&#xff1b; reload() 方法; replace() 方法; 页面自动刷新; reload() 方法 reload()方法用于刷新当…

SVN 服务器的搭建

当做大的项目是&#xff0c;svn是代码管理的好工具&#xff0c;如果是用自己的服务器&#xff0c;那么需要搭建SVN服务器。 Subversion是一款非常优秀的svn服务器工具&#xff0c;笔者采用VisualSVN server &#xff0c;因为它集成了apache,不用再进行过多的配置。 首先下载安…

SVN服务器搭建与使用

TortoiseSVN&#xff08;1.9.5&#xff09;与VisualSVN Server搭建SVN版本控制系统&#xff08;中文版&#xff09; 参考文献&#xff1a;http://www.cnblogs.com/xing901022/p/4399382.html 本片主要介绍如何搭建SVN版本控制系统&#xff0c;主要使用工具&#xff1a; 1. 服…

svn的搭建和使用

一&#xff1a;SVN服务器搭建和使用。 1. 首先来下载和搭建SVN服务器,下载地址如下: http://subversion.apache.org/packages.html&#xff0c;进入网址后&#xff0c;滚动到浏览器最底部看到如下截图&#xff1a; 个人认为最好用VisualSVN server 服务端和 TortoiseSVN客户…

Windows-Linux下的SVN服务器搭建及SVN操作

一、Windows下的SVN服务器搭建 首先准备一下三个软件&#xff1a; 1. VisualSVN-Server-3.8.0-x64.msi&#xff08;svn服务端&#xff09; 2. TortoiseSVN-1.9.6.27867-x64-svn-1.9.6.msi&#xff08;svn客户端&#xff09; 3. TortoiseSVN中文语言包_1.9.6.27867-x64-zh_…

SVN服务器搭建、客户端安装超详细图解教程

目录 一、安装包下载 1.下载 TortoiseSVN 服务器安装包 2.下载 TortoiseSVN 客户端安装包 二、详细安装过程图解 1.TortoiseSVN 服务器安装 2.TortoiseSVN 客户端安装 一、安装包下载 1.下载 TortoiseSVN 服务器安装包 >> 官网下载 Windows 平台安装包在网页最底…

linux下svn服务器搭建及使用(包含图解)

今天自己动手在linux搭建了svn服务器&#xff0c;把具体过程和一些自己的见解分享给大家&#xff0c;希望对大家有所帮助。   客户端svn&#xff08;大家见到的小乌龟&#xff09;下载地址为&#xff1a;http://tortoisesvn.net/downloads.html。这里客户端的安装就不作详解…

基于centos的svn服务器搭建与配置

第一步: svn简介 svn是subversion的简称,是一个开放源代码的版本控制系统. 第二步: 搭建前准备 服务器:centos7 (centos6以下教程 亲测也可以) 第三步: 首先检测服务器是否安装svn,如果安装先卸载 svnserve --version //查看svn版本信息 yum remove subversion …

Linux HTTPS+SVN服务器搭建

Linux HTTPSSVN服务器搭建 一、SVN简介&#xff1a; SVN是Subversion的简称&#xff0c;是一个开放源代码的版本控制系统&#xff0c;相较于RCS、CVS&#xff0c;它采用了分支管理系统&#xff0c;它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion…