当前位置:   article > 正文

事务ACID四大特性(图文详解~)

acid四大特性

ACID

ACID 是数据库管理系统中保证事务正确执行的四大特性的缩写。

在这里插入图片描述

1. Atomicity(原子性)

  • 原子性指事务是不可分割的单位,要么全部执行成功,要么全部失败回滚。—All or nothing.

在这里插入图片描述

  • 通常使用日志记录机制来启动回滚功能。

在这里插入图片描述

  • 在事务执行过程中,如果发生错误,系统会撤销事务已经执行的操作,使数据回滚到事务开始前的状态,保证数据的一致性。
    在这里插入图片描述
    在这里插入图片描述

2. Consistency(一致性)

  • 一致性指事务将系统从一个一致性状态转换到另一个一致性状态。

在这里插入图片描述

  • 在事务开始前和事务结束后,数据库的完整性约束没有被破坏,数据的约束依然有效。

  • 事务执行的过程中,数据库始终保持一致性状态。

在这里插入图片描述

  • 例如,账户余额不可以是负数,一致性可以防止无效数据弄乱数据库。

在这里插入图片描述

3. Isolation(隔离性)

  • 隔离性指数据库允许多个并发事务同时对其数据进行读写,并且事务之间是相互隔离的,一个事务的执行不应影响其他事务的执行。

在这里插入图片描述

数据库系统中的隔离级别是指多个事务并发执行时,一个事务对数据的读写操作受到其他事务影响程度的程度。

隔离级别越高,事务之间的相互影响越小,但也可能会导致系统性能下降。

1. 读未提交(Read Uncommitted)

  • 定义:最低的隔离级别。一个事务可以读取另一个事务未提交的数据修改。
  • 问题:可能会导致脏读(Dirty Read),即一个事务读取到了另一个未提交事务的数据,但该事务最终可能会回滚,导致读取到的数据是无效的。

在这里插入图片描述

2. 读已提交(Read Committed)

  • 定义:一个事务只能读取到另一个事务已经提交的数据。

在这里插入图片描述

  • 解决的问题:避免了脏读,但仍可能导致不可重复读和幻读问题。

在这里插入图片描述

  • 不可重复读示例:一个事务内的两次读取操作返回的结果不一致,通常是由于其他事务修改了数据造成的

同一个事务中多次读取同样的数据时,其值保持发生了改变。即两次读取期间,其他事务对数据进行了修改,该事务在同一事务内的多次读取结果不一致。

在这里插入图片描述

  • 幻读示例:

一个事务内两次查询返回的记录数不一致,通常是由于其他事务插入了新数据或删除了数据造成的。

在这里插入图片描述

3. 可重复读(Repeatable Read)

  • 定义:确保在同一个事务中多次读取同样的数据时,其值保持不变。即使其他事务对数据进行了修改,该事务在同一事务内的多次读取结果也不会改变。

在这里插入图片描述

  • 解决的问题:避免了不可重复读,但仍可能出现幻读问题。

4. 序列化(Serializable)

在这里插入图片描述

  • 定义:最高的隔离级别,通过强制事务串行执行来避免并发问题。保证了所有并发事务的执行效果与串行执行的效果相同,从而避免了脏读、不可重复读和幻读的问题。

在这里插入图片描述

  • 解决的问题:提供最高的数据一致性和完整性,但可能会导致性能下降,因为事务必须严格按照顺序执行。

选择隔离级别的考虑因素:

  • 数据一致性要求:如果应用对数据一致性要求极高,应选择较高的隔离级别,如可重复读或串行化。

  • 并发性能需求:如果并发性能是关键,可以选择较低的隔离级别,如读已提交或读未提交,但需要考虑并发带来的数据一致性问题。


4. Durability(持久性)

  • 持久性指一旦事务提交,其所做的修改会永久保存在数据库中,并不会因系统故障导致数据的丢失。

在这里插入图片描述

  • 通常通过将事务的操作持久化到非易失性存储介质(如硬盘)来实现,保证即使系统崩溃,事务提交的数据也不会丢失。
  • 分布式节点持久化:

在这里插入图片描述
在这里插入图片描述


一言以蔽之:原子性——回滚失败事务,一致性——遵循规则,隔离性——防止干扰,持久性——数据永久保存。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/898742
推荐阅读
相关标签
  

闽ICP备14008679号