ACID

ACID 是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性。

原子性

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

一致性

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

隔离性

Isolation,隔离性,又称独立性。

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

持久性

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

如果没有 ACID

为了更好地理解 ACID,可以以银行账户转账举例:

A 账户有 1000,B 账户有 300,A 给 B 转账 500。

  • 原子性。转账过程中,因为 B 的账户不存在,交易失败了。那么 A 的余额减少了,B 的余额却没增加。

  • 一致性。转账过程中,A 的余额刚刚被扣除,数据库系统崩溃了,金额不翼而飞。

  • 隔离性。转账过程中,转账还未完成,A 查询自己账户就已经显示被扣款了。

  • 持久性。这个很好理解,数据库所在服务器断电了。

题外话,事务的隔离性是通过锁、MVCC 等实现的,事务的原子性、一致性和持久性则是通过事务日志实现。

powered by Gitbook该文件修订时间: 2020-04-10 10:05:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""