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