zoukankan      html  css  js  c++  java
  • 数据库事务中的四大特性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覆盖掉了。

  • 相关阅读:
    ElasticSearch 2 (15)
    ElasticSearch 2 (14)
    ElasticSearch 2 (13)
    ElasticSearch 2 (12)
    浅谈 Comet、SSE、WebSocket
    js快速将字符串数组转化为数字数组(互换)
    如何给自己的vue组件做一个提示
    顶级域名和子级域名之间的cookie共享和相互修改、删除
    前端工程化
    数据校验工具 data-police
  • 原文地址:https://www.cnblogs.com/doublezh/p/10868849.html
Copyright © 2011-2022 走看看