数据库原理与应用 第 9 章 · 第一节
课程第 9 章第一节 这一章五件事为什么要并发事务的概念四种模式三条语句四个字母转账语句原子性一致性隔离性持久性 版式
第 9 章 数据库并发控制与封锁 · 第一节

并发、事务与 ACID

多人同时用一个库会出什么事,事务又是怎么把一串操作捆成一件事的。
本 节 知 识 点
  1. 01从一个人用,到很多人一起用
  2. 02这一章的五个小节
  3. 03串行的代价是机器一直闲着
  4. 04一串操作捆成一个不可分割的整体
  5. 05MySQL 管事务的四种方式
  6. 06开始、提交、回滚
  7. 07ACID 是事务的四条性质
  8. 08把转账写成七句 SQL
  9. 09A:要么全做,要么全不做
  10. 10C:转完账总额还是那么多
  11. 11I:几笔事务同时跑,互不打扰
  12. 12D:提交了就一定还在
01
第 9 章 · 第一节

从一个人用,到很多人一起用

前八章都当作只有你一个人在敲,这一章开始有别人。

第 1 页课件

重 点

一个人敲的时候,SQL 怎么写就怎么算。多个人同时敲,结果还要看时序。

打个比方

一个人取款机取钱没问题,两个人同时对着一个账户取,就得排队。

02
第 9 章 · 第一节

这一章的五个小节

并发是什么,事务是什么,会出什么错,怎么防,锁怎么加。

第 2 页课件

记牢它顺着看

  1. 先认识事务
  2. 再看四种错
  3. 隔离级挡一层
  4. 锁再挡一层

重 点

四种数据不一致性是这一章的骨架,后面两节都在讲怎么把它们挡掉。

03
第 9 章 · 第一节

串行的代价是机器一直闲着

一个用户跑完下一个才能进,大部分时间机器在等输入输出。

第 3 页课件

分清楚两种做法

做法代价
排队一个一个来机器闲着
同时放进来可能出错

重 点

并发是为了把机器用满,代价是要花力气防住数据不一致。

想一想

并发度越高越好吗?

04
第 9 章 · 第一节

一串操作捆成一个不可分割的整体

事务是一个逻辑工作单元,里面的操作要么全算数要么全不算数。

第 4 页课件

关键术语

Tr
a

重 点

判断一串操作该不该做成事务,看它们是不是一个逻辑上的整体。

打个比方

转账是先扣再加两步,只做完一步就是有人凭空少了钱。

05
第 9 章 · 第一节

MySQL 管事务的四种方式

自动提交、显式、隐式、分布式,日常用的是前两种。

第 5 页课件

分清楚常用的两种

模式什么时候提交
自动提交每句都提交
显式写 COMMIT 才提交

重 点

MySQL 默认是自动提交,每一句 SQL 自己就是一笔事务。

试一试关掉自动提交会怎样

autocommit
我这边敲 UPDATE account SET R = 400
    06
    第 9 章 · 第一节

    开始、提交、回滚

    三句话分别管开始、落地和撤销,事务的一生就这三步。

    第 6 页课件

    记牢它三个动作

    1. START 开
    2. COMMIT 存
    3. ROLLBACK 撤

    重 点

    ROLLBACK 撤的是这一笔事务里所有的改动,不是最后一句。

    上机做

    上机一第 2 题 开一笔事务再撤掉

    想一想

    COMMIT 之后还能 ROLLBACK 回去吗?

    07
    第 9 章 · 第一节

    ACID 是事务的四条性质

    原子性、一致性、隔离性、持久性,转账这个例子把四条都占全了。

    第 7 页课件

    记牢它四条

    1. A 不可分
    2. C 前后都对
    3. I 互不打扰
    4. D 存住了

    重 点

    ACID 说的是同一件事的四个侧面,不是四条互不相干的规定。

    知道更多

    这四个词是教材 9.2 节的核心,选择题里常给一句话让你判断属于哪一条。

    08
    第 9 章 · 第一节

    把转账写成七句 SQL

    六步操作外加一句 COMMIT,中间任何一步出事都不能只做一半。

    第 8 页课件

    重 点

    六句 SQL 夹在 START TRANSACTION 和 COMMIT 中间,才是一笔事务。

    试一试走到第几步断电

    断在
      账户断电那一刻重启之后

      上机做

      上机一第 4 题 把这七句敲一遍

      09
      第 9 章 · 第一节

      A:要么全做,要么全不做

      做到一半断电,重启之后那一半也不算数,整笔撤回起点。

      第 9 页课件

      关键术语

      At
      o

      重 点

      原子性靠回滚日志实现,没提交的改动重启时会被一条条撤销。

      打个比方

      转账扣了钱没到账,这种半截状态银行不认,直接当作没转过。

      10
      第 9 章 · 第一节

      C:转完账总额还是那么多

      事务从一个正确状态跳到另一个正确状态,中间那个不平的状态外人看不见。

      第 10 页课件

      关键术语

      Co
      n

      重 点

      account1 加 account2 转账前后都是 1400,这个不变量就是一致性。

      想一想

      一致性靠数据库自己保证,还是靠写事务的人保证?

      11
      第 9 章 · 第一节

      I:几笔事务同时跑,互不打扰

      没提交的时候别人看不见,几个人同时转账结果也要和一个一个转一样。

      第 11 页课件

      关键术语

      Is
      o

      重 点

      四种数据不一致性全是隔离性没做够造成的,隔离级别就是调它的旋钮。

      打个比方

      换衣间的帘子,你在里面换到一半,外面的人不该看见。

      12
      第 9 章 · 第一节

      D:提交了就一定还在

      COMMIT 一返回,改动就写进了日志,之后停电断网都丢不了。

      第 12 页课件

      关键术语

      Du
      r

      分清楚分清楚

      性质管的是
      原子性没提交的撤掉
      持久性已提交的留住

      重 点

      原子性和持久性是一体两面,靠的是同一套日志。

      保山学院·人工智能教研室·曹鼎鼎