• 数据库 ACID


    ACID是指一个事务本质上有四个特点:

    Atomicity:原子性

    Consistency:一致性

    Isolation:隔离性

    Durablilty:耐久性

     

    原子性

    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

    例如A向B转200元

     如果A转成功,B也必须成功,否则都不成功,这就是所谓的要么都成功,要么都不成功

     

    一致性

    事务前后保持处于一致的状态,不管在任何给定的时间并发事务有多少

    一致性具有以下特点:

    • 如果一个操作触发其他辅助操作(级联、触发器),这些辅助操作也必须成功,否则整个事务交易失败
    • 如果系统是由多个节点组成,一致性规定所有的变化必须传播到所有节点(多主复制),如果从站节点异步更新,那么我们打破一致性规则,系统成为“最终一致性”。
    • 一个事务是数据状态的切换,因此,如果事务并发对个,系统也必须串行执行这些事务操作。

    操作前:A:800,B:200

    操作后:A:600,B:400

    操作前与操作后的状态一致,一致性表示事务完成后,符合逻辑运算

    隔离性

    事务的隔离性是指当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,即多个事务之间要互相隔离。

    针对两个事物同时进行,其中一个事物读取到的是另外一个事务提交之前的数据,A与C同时向B转钱,B的初始钱数都是200

    当A向B转过钱之后的状态

    A=800-200=600

    B=200+200=400

    当C向B转过钱之后的状态

    C = 1000-100=900

    B=200+100=300

    两个事物的对B的状态是隔离的,不受其他事务的影响。

    持久性

    事务的持久性是指一个事务一旦被提交,这个事务对数据库里的数据的改变将是永久的,接下来即使数据库发生故障也不应该对其有任何影响

     操作前:A:800,B:200

    操作后:A:600,B:400

    如果在操作前(事务还没有提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为:

    A:800,   B:200

    如果在操作前(事务已经提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为:

    A:600,   B:400

  • 相关阅读:
    nsq main里面golang多个协程管理写法
    关于centos压测的问题
    Jaeger全链路go实现,包含http和消息队列的链式传递
    mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法
    Axure9:一键复制Iconfont图标到Axure的插件安装
    Axure9:导入阿里云DataV.GeoAtlas矢量地图到Axure
    Axure:编辑技巧:拖动复制、编组、组内选中、穿透选中、选中模式
    Axure学习一:打开软件,预览和生成HTML原型、安装Chrome插件
    Axure RP授权码
    vm 安装rethat和centos
  • 原文地址:https://www.cnblogs.com/l199616j/p/10694034.html
Copyright © 2020-2023  润新知