数据库原理与应用 第 9 章 · 第三节
课程第 9 章第三节 四个级别查和设读未提交例9-2脏读现场读已提交例9-3第二次查第三次查 版式
第 9 章 数据库并发控制与封锁 · 第三节

隔离级别与前两级

SQL 标准的四种隔离级别,以及最低那两级各能挡住什么。
本 节 知 识 点
  1. 19SQL 标准定了四档
  2. 20两句话查当前级别、改当前级别
  3. 21最低一级:别人没提交的也照读
  4. 22两扇窗口的第一幕
  5. 23T1 第二次查,数变了
  6. 24第二级:只读别人已经提交的
  7. 25读已提交要查三次
  8. 26读已提交下,第二次和第一次一样
  9. 27T2 一提交,T1 就跟着变了
19
第 9 章 · 第三节

SQL 标准定了四档

从读未提交到串行化,越往上挡得越多,等得也越久。

第 19 页课件

记牢它由低到高

  1. 读未提交
  2. 读已提交
  3. 可重复读
  4. 串行化

重 点

级别越高异常越少并发越低,选哪一档是拿正确性换速度。

想一想

为什么不干脆全用最高那一级?

20
第 9 章 · 第三节

两句话查当前级别、改当前级别

一句 SELECT 查得到当前级别,一句 SET 就能换一档。

第 20 页课件

分清楚两个关键字

写法影响谁
GLOBAL以后新连的
SESSION当前这个窗口

重 点

上机改隔离级别一律写 SESSION,只动自己这个窗口。

上机做

上机三第 1 题 查一下当前是哪一级

想一想

改成 GLOBAL 之后,已经连着的窗口会跟着变吗?

21
第 9 章 · 第三节

最低一级:别人没提交的也照读

这一级什么也不挡,别人改了没提交你照样读得到。

第 21 页课件

重 点

这一级基本不做隔离,四种异常里只有丢失更新还被行锁挡着。

知道更多

实际项目里几乎没人用它,课上用它是为了把脏读演给你看。

22
第 9 章 · 第三节

两扇窗口的第一幕

T1 设成读未提交并开事务先查一次,T2 开事务改了 100 元不提交。

第 22 页课件

重 点

两段语句要在两个窗口里交替敲,一个窗口是做不出并发的。

记牢它交替顺序

  1. T1 设级别
  2. T1 查一次
  3. T2 改不提交
  4. T1 再查

想一想

T2 那句 update 后面为什么不写 commit?

23
第 9 章 · 第三节

T1 第二次查,数变了

T2 那 100 元根本没提交,T1 却已经读到了 600。

第 23 页课件

重 点

T2 只要 ROLLBACK,T1 手里那个 600 就成了一个从来没存在过的数。

试一试三级各读到什么

T1 的级别
T1 开事务后查了一次,中间 T2 把 account1 加了 100
T1 查的时机account1为什么

上机做

上机三第 2 题 把这一幕自己做一遍

24
第 9 章 · 第三节

第二级:只读别人已经提交的

只认已经提交的数据,别人手里那笔没落地就跟你无关。

第 24 页课件

重 点

这一级挡住了脏读,代价是同一笔事务里两次读可能不一样。

知道更多

Oracle 和 SQL Server 的默认级别就是这一档,MySQL 不是。

25
第 9 章 · 第三节

读已提交要查三次

T1 设成读已提交后开事务,一共查三次,中间穿插 T2 的改和提交。

第 25 页课件

重 点

三次查询分别在 T2 改之前、改了没提交、提交之后,看的就是这三个时机。

记牢它三个时机

  1. 改之前
  2. 改了没提交
  3. 提交之后
26
第 9 章 · 第三节

读已提交下,第二次和第一次一样

T2 改了没提交,所以 T1 第二次查还是 500。

第 26 页课件

重 点

脏数据读不到了,这就是读已提交比读未提交强的地方。

想一想

如果这时 T2 提交了,T1 第三次查会是多少?

27
第 9 章 · 第三节

T2 一提交,T1 就跟着变了

同一笔事务里三次查,前两次 500 第三次 600,这就是不可重复读。

第 27 页课件

重 点

读已提交挡得住脏读,挡不住不可重复读和幻象读。

分清楚两级对比

级别还会出的错
读未提交脏读等三种
读已提交不可重复读
保山学院·人工智能教研室·曹鼎鼎