事务ACID

2020-07-02  本文已影响0人  mark弟

事务:

由一系列数据库操作组成的一个完整的逻辑过程

ACID:

以下示例进一步说明了ACID属性。在这些示例中,数据库表具有两列,A和B。完整性约束要求A中的值和B中的值之和必须为100。下面的SQL代码如上所述创建一个表:

CREATE TABLE acidtest (A INTEGER, B INTEGER, CHECK (A + B = 100));

Atomicity(原子性):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。

我们可以说逻辑事务可以由一个或多个(几个)物理事务组成,或由一个或多个(几个)物理事务组成。除非执行了所有组件的物理事务,否则逻辑事务不会发生——对数据库有影响。假设我们的逻辑交易包括将资金从帐户A转移到帐户B。此逻辑交易可能由几笔实际交易组成,这些交易包括首先从帐户A中删除该笔金额作为第一笔实际交易,然后作为第二笔交易存入该金额作为第二笔实际交易。其间,如果发生异常,两笔交易都应失效。

Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。

一致性是一个非常笼统的术语,它要求数据必须符合所有验证规则。在前面的示例中,验证是A + B = 100的要求。必须检查所有验证规则以确保一致性。假定事务试图从减去10 甲而不改变乙。由于在每次事务处理后都会检查一致性,因此可以知道在事务处理开始之前A + B = 100。如果事务成功从A中删除10 ,将实现原子性。但是,验证检查将显示A + B = 90,这与数据库规则不一致。必须取消整个事务,并将受影响的行回滚到其事务前的状态。如果存在其他约束,触发器或级联,则在提交事务之前,将以与上述相同的方式检查每个更改操作。其他约束条件可能会出现类似的问题。我们可能要求A和B的数据类型均为整数。例如,如果我们要输入A的值13.5,交易将被取消,或者系统可能会以触发器的形式发出警报(如果/已将触发器写入此效果)。另一个例子是完整性约束,这不允许我们删除一个表中的行,该行的主键被其他表中的至少一个外键引用。

Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括未提交读(Read uncommitted)、提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。

Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

Wiki原文

上一篇下一篇

猜你喜欢

热点阅读