ACID--事务四大特性

简介: ACID,指的是在数据库事务正确执行的四个基本要素的缩写。 具体解释:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

ACID,指的是在数据库事务正确执行的四个基本要素的缩写。
具体解释:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)
任何一个数据库事物都 必须满足 ACID,只有这样才能保证在事务执行过程中的正确性

接下来我们逐条解释:

原子性(Atomicity)

原子性其实非常好理解,我认为它指的就是一种完整性,就是说任何一个具备原子性的事务只有两种状态:完成操作 和 未操作。原子性保证事务的一切操作要么一起成功要么一起失败。原子性的事务一旦开始就一直运行到结束,它不会被线程调度机制中断。如果遇到强制性中断,就会全部回滚到最初未操作的状态。还有一种说法是“原子操作(atomic operation)是不需要synchronized

一致性(Consistency)

这个是数据库事物的核心,它是数据库最基本的特性。这条特性看起来简单,但是理解起来还是比较复杂的。
它的书面定义是:数据库一致性(Database Consistency)是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
它分为两个方面:一致读一致写
一致读:事务读取数据只能从一个状态中读取,不能从2个或者2个以上状态读取。
一致写:事务执行的数据变更只能基于上一个一致的状态,且只能体现在一个状态中。
具体解释请认真参看并理解 知乎 如何理解数据库事务中的一致性的概念?徐志斌的回答

隔离性(Isolation)

数据并发读写中存在三大致命的问题:
脏读问题
例:A 向 B 传送数据,A 传送操作还未完成提交 B 就接受并更新了自己的数据,如果此时 A 遇到问题回滚了,那么 B 的数据就变成了脏数据(垃圾数据)

不可重复读问题
在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交
例:A 事务是读取两次数据,B 事务是修改数据,两个事务操作同一数据,恰好 B 事务发生在 A 事务两次读取之间,导致 A 两次读取结果不一致。这其实看似合情合理,其实是不被允许的,因为某些情况下一个事务对同一数据做同一操作的结果不一致会导致 bug

幻读问题
在同一个事务中,同一个查询多次返回的结果不一致。(注意与不可重复读问题的区别)
例:A 事务统计银行总存款数,B 事务是某一用户存款,如果 A 事务连续查两次结果不一致就是幻读。试想一下,银行如果存在幻读问题那可就有大麻烦了

隔离性按照级别分为四级(从上至下,隔离度越高)
READ_UNCOMMITTED(读未提交):
这个级别最低,安全系数最低,会导致一切并发性问题

READ_COMMITTED (读已提交):
在这个安全系数下就解决了脏读问题

REPEATABLE_READ(可重复读):
在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。它解决了脏读不可重复读问题

SERIALIZABLE(序列化):
这个就比较简单粗暴了,直接为了安全取消并发,一次只能执行一个事务

持久性(Durability)

就是说任何执行成功的事务修改后的数据都要保证永久的保存在数据库系统中,能够时刻记录系统的状态,并且保证发生故障后能够恢复

目录
相关文章
|
SQL Java 关系型数据库
JDBC详解
Java Database Connectivity(JDBC)是Java语言中用于访问关系型数据库的标准接口,定义了一组API,使Java程序能以统一方式连接、访问和操作不同关系型数据库,简化数据库操作,提高Java应用程序的可移植性和可维护性。使用JDBC进行数据库操作主要包括创建数据源对象、建立连接、构造和执行SQL语句及释放资源等步骤。此外,还可以使用Set系列方法设置值,并使用get系列方法获取查询结果。
960 2
JDBC详解
|
弹性计算 安全 Linux
1分钟畅玩!一键部署幻兽帕鲁联机服务器
1分钟畅玩!一键部署幻兽帕鲁联机服务器,如何自建幻兽帕鲁服务器?基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了,一看就懂系列。
275 1
|
应用服务中间件 Linux Apache
阿里云服务器Linux一键安装web环境全攻略
阿里云服务器Linux一键安装web环境全攻略
|
监控 Java 数据库连接
|
编解码 网络协议 算法
|
MySQL 关系型数据库 数据库
MySQL中文乱码解决方法(原创)
本人之前下载了一款用于可视化操作MySQL数据的软件 Navicat 8 for MySQL,挺好用的,顺便也可用于测试一下中文乱码问题是否解决 分步骤进行一、设置字符集为UTF8 首先,如果要在数据库中存储中文数据,个人建议将数据库的字符集设...
1247 0
|
14天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾