数据库原理与应用 第 9 章 · 第五节
课程第 9 章第五节 封锁封锁粒度行锁表锁两种锁加写锁加读锁读锁下的三试 版式
第 9 章 数据库并发控制与封锁 · 第五节

封锁与两种锁

锁是什么,锁多大一块,X 锁和 S 锁分别管什么。
本 节 知 识 点
  1. 33动数据之前先打招呼
  2. 34锁一整张表还是锁一行
  3. 35两种粒度各自的代价
  4. 36X 锁独占,S 锁共享
  5. 37LOCK TABLES account WRITE
  6. 38LOCK TABLES account READ
  7. 39T2 改不了,加写锁不行,加读锁行
33
第 9 章 · 第五节

动数据之前先打招呼

事务操作某个数据对象之前先申请加锁,锁没放开别人改不动。

第 33 页课件

关键术语

Lo
c

重 点

隔离级别是说要什么效果,封锁是说这个效果怎么做出来。

打个比方

会议室要先预约,你在开会的时候别人推不开门。

34
第 9 章 · 第五节

锁一整张表还是锁一行

锁住的数据量越少,撞车的机会越小,并发度越高。

第 34 页课件

关键术语

Lo
c

重 点

粒度小并发高但管理开销大,粒度大省事但一锁一大片。

想一想

改一行数据,锁一整张表有什么坏处?

35
第 9 章 · 第五节

两种粒度各自的代价

表级锁开销小加锁快不会死锁,行级锁开销大但并发度最高。

第 35 页课件

分清楚四项对比

表锁行锁
开销
并发
死锁不会
冲突

重 点

InnoDB 默认用行锁,所以它会死锁,MyISAM 只有表锁所以不会。

知道更多

行锁其实锁的是索引项,WHERE 里的字段没有索引时会退化成锁全表。

36
第 9 章 · 第五节

X 锁独占,S 锁共享

X 锁是写锁,加了别人什么锁都加不上。S 锁是读锁,几个人可以一起加。

第 36 页课件

分清楚分清楚

别人还能
X 排它锁什么都不行
S 共享锁再加 S 锁

记牢它两句话

  1. X 独占
  2. S 可共享
  3. S 挡写不挡读

试一试两把锁能不能同时上

T1 先加
T2 再要
37
第 9 章 · 第五节

LOCK TABLES account WRITE

T1 给整张表加了排它锁,T2 连读都读不动,只能等着。

第 37 页课件

重 点

写锁一上,别人的 SELECT 都会卡在那儿,直到 UNLOCK TABLES。

知道更多小心

LOCK TABLES 会顺手把当前没提交的事务提交掉,课件没提这一条。

上机做

上机四第 2 题 亲手看一次卡住

38
第 9 章 · 第五节

LOCK TABLES account READ

T1 加了共享锁,自己反而改不了,T2 读得到但也改不了。

第 38 页课件

重 点

加了 READ 锁之后自己也只能读,改这张表会报 1099。

想一想

为什么自己加的读锁会把自己也挡住?

39
第 9 章 · 第五节

T2 改不了,加写锁不行,加读锁行

共享锁允许并发读取,谁也别想在这时候改数据。

第 39 页课件

分清楚T2 三次尝试

T2 想干的结果
读数据
改数据等着
加 READ 锁

重 点

读锁之间相容,读锁和写锁之间不相容,这就是相容矩阵的全部内容。

上机做

上机四第 4 题 三种尝试各试一次

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