SQL - 事务的基础知识

  1. 概述

    1. SQL 事务的基本特性
  2. 背景

    1. 划水力作

1. 事务

  1. 概述

    1. 事务
  2. 事务

    1. 定义

      访问并可能更新数据库中各种数据项的一个程序执行单元
      
  3. 我的理解

    1. 操作集合
      1. 对数据库进行一些列有序的操作
      2. 这些操作被视为一个整体
      3. 这个整体必须是完整的
      4. 多个整体之间, 可能会相互影响
  4. 怎么说

    1. 光说这个理解, 肯定是会很抽象的
      1. 下面, 我就简单介绍一些场景来举例子

2. 事务的特性

  1. 概述

    1. 简述 事务的特性
  2. acid - 酸的

    1. a - atomicity - 原子性

      1. 事务的一系列操作, 是一个完全的整体
        1. 要么都成功, 要么都失败
        2. 没有第三种状态
        3. 针对 操作
    2. c - consistency - 一致性

      1. 事务前后的数据, 必须保持一致
        1. 事务处理前, 所有的相关数据, 是 版本A
        2. 事务处理后, 所有的相关数据, 是 版本B
        3. 不可能出现 一种状态, 介于 A 和 B 之间
        4. 针对 数据
    3. i - isolation - 隔离性

      1. 并行/并发 处理多个事务时, 事务之间, 可能会发生影响
      2. 需要想办法避免这种互相影响
    4. d - durability - 持久性

      1. 执行完的事务, 需要保存下结果

3. 场景

  1. 概述
    1. 一些相关的场景
    2. 举个例子方便自己理解
      1. 如果前面看明白的, 后面就不用看了

背景

  1. 某人的银行卡上, 有 100 块钱
    1. 每个场景都是以这个为 初始条件

场景1 - 取钱故障

  1. 概述

    1. 取钱故障的场景
  2. 流程 - 假设

    1. 用户 用户请求取钱, 100 元
    2. 银行 确认余额
    3. 银行 扣除余额
    4. 银行 给出钞票
    5. 用户 取钱完毕
  3. 意外

    1. step 4 出问题了
      1. 余额被扣除, 但是钞票没出来...
    2. 结果
      1. 用户白白损失了 100 块钱
  4. 问题

    1. 整个流程, 并没有走完, 就中断了
    2. 用户没有取到钱
  5. 相关特性 - 完整性

    1. 如果这个时候, 保证了流程的完整性, 就不会出现这个情况
      1. 钞票没给出来, 表示流程失败
      2. 失败了选择还原后重试, 而不是继续执行

场景2 - 存钱故障

  1. 概述

    1. 存钱场景
  2. 流程 - 假设

    1. 用户 请求存钱 100 元
    2. 银行 接受钞票
    3. 银行 确认存入
    4. 用户 存款完毕
  3. 意外

    1. step3 出问题
      1. 金额 没有加上
    2. 结果
      1. 存款前后, 余额 都是 100 元
  4. 问题

    1. 流程走完了
    2. 但是 存款后 的数据出现了问题
    3. 结果
      1. 用户损失了 100 块钱
  5. 相关特性 - 一致性

    1. 需要确保 事务 执行完后, 数据就是完整的受到了事务的影响

场景3 - 并发取钱

  1. 概述

    1. 并发取钱
  2. 流程 - 假设

    1. 用户 在 银行窗口A 申请取 100 元
    2. 用户 同时, 在 银行窗口B 申请取 100 元
    3. 银行 确认金额
    4. 银行 扣除余额
    5. 银行 给出钞票
    6. 用户 取钱完毕
  3. 意外

    1. 窗口A 和 窗口B 同时取钱
    2. 每个窗口取了 100
    3. 结果
      1. 用户去除了 200
  4. 问题

    1. 银行亏了 100
  5. 相关特性 - 隔离性

    1. 需要避免事务之间的相互干扰

场景4 - 银行数据丢失

  1. 概述

    1. 数据丢失
  2. 流程 - 假设

    1. 银行数据丢失
    2. 账户金额全部归0
  3. 结果

    1. 用户损失了 100
  4. 相关特性 - 持久性

    1. 需要确保, 事务的结果被正确存储

ps

  1. 后续

    1. 讲一下 隔离性 遇到的一些问题
  2. ref

    1. MySQL 【常识与进阶】
posted @ 2020-03-27 16:32  轩辕拾銉  阅读(134)  评论(0编辑  收藏  举报