zoukankan      html  css  js  c++  java
  • 如何理解事务的四大特性

    概要

    数据库事务四大特性 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)简称ACID

    定义

    原子性:事务是一个不可分割的单位,事务中的所有操作要么都成功,要么都失败
    一致性:所谓一致性,指的是数据处于一种有意义的状态,这种状态是语义上的而不是语法上的。即从实际的业务逻辑上来说最终结果是对的,是跟实际所期望的结果完全符合的。
    隔离性:事物与事物之间是相互隔离的,不同隔离级别描述了事务被隔离的程度。
    持久性:是指事务一旦提交后,数据改变是永久性的,不可变的。

    一致性是基础,也是最终目的,其他三个特性(原子性、隔离性和持久性)都是为了保证一致性的。

    解析

    1 原子性并不能完全保证一致性。

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

      例如,事务1需要将100元转入帐号A:先读取帐号A的值,然后在这个值上加上100。但是,在这两个操作之间,另一个事务2修改了帐号A的值,为它增加了100元。那么最后的结果应该是A增加了200元。但事实上,務1最终完成后,帐号A只增加了100元,因为事务2的修改结果被事务1覆盖掉了。此时不管是事务 1 还是事务 2,它们都各自保证了原子性,但是并没有做到一致性,因为A 应该增加了 200 元,而实际只增加了100 元

    2 即是事物有了原子性 隔离性 持久性并不能完全保证一致性  

      要根据具体的业务来选择不同的隔离级别 才能保证事物的一致性。

      例如,事务1的隔离级别是未提交读,需要将100元转入帐号A:先读取帐号A的值,然后在这个值上加上100。但是,另一个事务2在事物1读取之前修改了帐号A的值为200,但是还没有提交,而此时事物1读取的值就是200,但是之后事物2回滚了,而事物1又给A的值加了100,最终A的值是300,此时就会导致账号A的值多了100,最终导致数据不一致。此时如果事务1用的是提交读的隔离级别就可以保证一致性。

  • 相关阅读:
    【BZOJ4103】异或运算(THUSC2015)-可持久化trie树+位运算
    【BZOJ4103】异或运算(THUSC2015)-可持久化trie树+位运算
    Tempter of the Bone(dfs+奇偶剪枝)题解
    逃离迷宫(BFS)题解
    Almost Union-Find (并查集+删除元素)题解
    POJ 1182 食物链(并查集+偏移向量)题解
    Connections in Galaxy War (逆向并查集)题解
    A^B mod C (快速幂+快速乘+取模)题解
    hdu1272 小希的迷宫 (并查集)
    大明A+B(大数相加)解题报告
  • 原文地址:https://www.cnblogs.com/Tony100/p/12784968.html
Copyright © 2011-2022 走看看