zoukankan      html  css  js  c++  java
  • 关系型数据库----事务特性理解

    关系数据库 --- 事务

    事务遵循ACID规则

    1,A (Atomicity) 原子性

    原子性指的是事务作为一个最小的执行单位不可分割,一个事务里面的操作要么全部做完,要么全部不做, 只要一个操作失败全部 ROLLBACK

    理解案例:我们进行一次银行转账(一个事务):A转10000元给B . 银行系统会执行的操作理应是从A 银行账户扣10000(操作一),给B的账户加10000(操作二),那如果因为网络中断,系统故障或者其他任何原因只执行了操作一那么导致结果是A 的账户少了10000元但是B 的账户 不会有任何改变.显然这样的事情是不能发生的.

     

    结论: 关系型数据库事务应该遵循原子性原子规则,事务内的无论有多少操作都应该是 同生共死要么全部成功,要么全部失败

    ps: 关系型数据库以理解关系为主,原子性也可以理解为事务和其内部操作的关系.

     

    2,C (Consistency)一致性

    一致性指的是事务的运行中数据库要保持一致的状态事务的运行不会改变数据库原本的一致性约束

     

    理解案例:我们数据库用有一个用户表,一般用户理应由以下字段及字段约束

    id: (primary key, not null, INTEGER) name:(not null,CHAR) password(not nul,CHARl)

     

    表内有这样一个用户

    id : 1 , name: xiaoyuan ,password: 122345678

    假设我们现在提交一个事务为删除用户xiaoyuan 的用户名会发生什么呢?

    表结构字段约束中name 为非空, 如果一个用户的name 字段为空那么直接会导致数据库的错误

     

    结论:关系型数据库事务应该遵循一致性的原则,即事务的提交一定要遵循数据库本身结构

    ps:会有人理不清原子性和一致性的区别,一致性也可以理解为事务和数据库之间的关系

     

    3 ,I(Isolation)隔离性

    隔离性是对同一个资源操作的事务,是系统在给定时间内执行的唯一操作。

    理解案例:

    假定A 先生有银行卡有10000元现在花5000元去买一台电脑,在同一时间A的老婆用同一账户的副卡要花6000元买一个包包,正常情况下10000元是不能变成11000元的,但是数据库在同一时间内有可能会存在一个资源经抢夺问题,即同一时间两个事务取读A 银行卡余额都是10000在同时去支付两个交易都能支付成功,银行是不愿意发生这种事情的

    结论: 关系数据库事务应该有隔离性,不同事务不能同时对一个资源进行操作

    ps:隔离性也可以理解为事务和事务之间的关系

     

    4,D (Durability)持久性

    持久性是最容易理解的,事务一旦提交,数据就永久安全的保存到磁盘中

    理解案例:A 先生 在银行账户中有10000元老婆买包包用了10000余额0,第二天银行系统更新卡内余额又回到了三天前的状态又可以买电脑了,显然这个A 的臆想

    结论: 关系数据库事务应该有持久性

  • 相关阅读:
    pipelinewise 学习二 创建一个简单的pipeline
    pipelinewise 学习一 docker方式安装
    Supercharging your ETL with Airflow and Singer
    ubuntu中使用 alien安装rpm包
    PipelineWise illustrates the power of Singer
    pipelinewise 基于singer 指南的的数据pipeline 工具
    关于singer elt 的几篇很不错的文章
    npkill 一个方便的npm 包清理工具
    kuma docker-compose 环境试用
    kuma 学习四 策略
  • 原文地址:https://www.cnblogs.com/renoyuan/p/11213139.html
Copyright © 2011-2022 走看看