数据库事务中的四大特性ACID

Posted doublezh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库事务中的四大特性ACID相关的知识,希望对你有一定的参考价值。

一、概念

  数据库事务中的四大特性(ACID):

  A:原子性(Atomicity),一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

    事务在执行过程中发生错误,会被回滚(rollback)到事务开始前的状态,就像这个事务从未执行过一样。

    就像你买东西要么交钱收货一起都执行,要么发不出货,就退钱。

  C:一致性(Consistency),一致性是指事务使得系统从一个一致的状态转换到另一个一致状态。

    比如数据库崩溃后重启,此时数据库处于不一致的状态,此时数据库必须做crash recovery操作,大致步骤如下:

      a、通过日志REDO(重演所有执行成功但是未写入到磁盘的操作)

      b、再对到数据库崩溃前没有执行完成的事务进行UNDO(撤销所有执行了一部分,但是有一部份还没有执行完成,且尚未提交的操作,保证事务的原子性)

      c、crash recovery结束后,数据库恢复了一致性,可以继续工作

  I:隔离性(Isolation),指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

    由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

    打个比方,你买东西这个事情,是不影响其他人的。

  D:持久性(Durability),指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。

    即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

    打个比方,你买东西的时候需要记录在账本上,即使老板忘记了那也有据可查。

二、理解

  1、原子性并不能完全保证一致性。在多个事务并行进行的情况下,即使保证了每一个事务的原子性,仍然可能导致数据不一致的结果。

    例如,事务1需要将100元转入帐号A:先读取帐号A的值,然后在这个值上加上100。但是,在这两个操作之间,另一个事务2修改了帐号A的值,为它增加了100元。那么最后的结果应该是A增加了200元。但事实上,%20事务1最终完成后,帐号A只增加了100元,因为事务2的修改结果被事务1覆盖掉了。

以上是关于数据库事务中的四大特性ACID的主要内容,如果未能解决你的问题,请参考以下文章

python事务四大特性ACID

事务的四大特性ACID

数据库事务的四大特性ACID

数据库事务的四大特性(ACID)

事务事务的四大特性(ACID)三大并发问题四种锁事务的隔离级别

事务的四大特性