zoukankan      html  css  js  c++  java
  • 51、关系型数据库的四大特性在得不到保障的情况下会怎样?

    ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

    我们以从A账户转账50元到B账户为例进行说明一下ACID这四大特性。

    原子性

    原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。即要么转账成 功,要么转账失败,是不存在中间的状态!

    如果无法保证原子性会怎么样?

    OK,就会出现数据不一致的情形,A账户减去50元,而B账户增加50元操作失败。系统将无故丢失50元 ~

    一致性

    一致性是指事务执行前后,数据处于一种合法的状态,这种状态是语义上的而不是语法上的。 那什么是 合法的数据状态呢?这个状态是满足预定的约束就叫做合法的状态,再通俗一点,这状态是由你自己来 定义的。满足这个状态,数据就是一致的,不满足这个状态,数据就是不一致的!

    如果无法保证一致性会怎么样?

    例一:A账户有200元,转账300元出去,此时A账户余额为-100元。你自然就发现了此时数据是不一致 的,为什么呢?因为你定义了一个状态,余额这列必须大于0。

    例二:A账户200元,转账50元给B账户,A账户的钱扣了,但是B账户因为各种意外,余额并没有增 加。你也知道此时数据是不一致的,为什么呢?因为你定义了一个状态,要求A+B的余额必须不变。

    隔离性

    隔离性是指多个事务并发执行的时候,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间 不能互相干扰。

    如果无法保证隔离性会怎么样?

    假设A账户有200元,B账户0元。A账户往B账户转账两次,金额为50元,分别在两个事务中执行。如果 无法保证隔离性,A可能就会出现扣款两次的情形,而B只加款一次,凭空消失了50元,依然出现了数 据不一致的情形!

    持久性

    根据定义,持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障 不应该对其有任何影响。

    如果无法保证持久性会怎么样?

    在MySQL中,为了解决CPU和磁盘速度不一致问题,MySQL是将磁盘上的数据加载到内存,对内存进行操作,然后再回写磁盘。好,假设此时宕机了,在内存中修改的数据全部丢失了,持久性就无法保证。

    设想一下,系统提示你转账成功。但是你发现金额没有发生任何改变,此时数据出现了不合法的数据状 态,我们将这种状态认为是数据不一致的情形。

  • 相关阅读:
    2 java开发环境的配置步骤
    1 java 笔记
    sql 创建新表时的完成格式
    sql 将英文句子中的单词首字母转换为大写
    c# datatable 如何转CSV文件
    c#调用存储过程实现批量增加和修改数据
    c#如何使用MemoryStream和BinaryFormatter进行对象的序列化和返序列化
    supersr--KVO/KVC
    supersr--控制器的生命周期:
    Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型
  • 原文地址:https://www.cnblogs.com/crbhf/p/15147447.html
Copyright © 2011-2022 走看看