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用的是提交读的隔离级别就可以保证一致性。

  • 相关阅读:
    max_input_vars 的影响
    php中定义网站根目录的常用方法
    phpstorm编辑器智能提示框架代码
    XunSearch(讯搜)的使用教程步骤
    xunsearch增量索引改进版
    在Windows7上安装coreseek3.2同时在PHP下简单实现步骤
    Linux下PHP+MySQL+CoreSeek中文检索引擎配置
    用js实现导航菜单点击切换选中时高亮状态
    jquery ajax POST 例子详解
    CentOS如何挂载硬盘
  • 原文地址:https://www.cnblogs.com/Tony100/p/12784968.html
Copyright © 2011-2022 走看看