第 9 章 · 第四节
第三级:MySQL 的默认级别
同一笔事务里执行相同的查询,读到的结果始终一致。

同一笔事务里执行相同的查询,读到的结果始终一致。

T2 改完之后在自己窗口里查是 600,同一时刻 T1 查还是 500。

自己改的自己当然看得见,没提交之前别人一律看不见。
| 谁在查 | 看到的 |
|---|---|
| T2 自己 | 600 |
| T1 | 500 |
T2 提交之后,T1 这一笔事务里会跟着变吗?
T1 第二次查仍然是 500,避免了不可重复读。

T1 看的是自己开事务那一刻的快照,T2 提交在那之后,跟它无关。
课件说这一级挡不住幻象读,那是 SQL 标准的说法。InnoDB 的快照连行数也定住了,挡得住。
T1 提交之后再查一次,会看到 600 吗?
强制事务一个接一个排队,冲突自然就不存在了。

级别越高挡得越多,这张表是这一节的总结。

| 级别 | 挡住几种 |
|---|---|
| 读未提交 | 一种 |
| 读已提交 | 两种 |
| 可重复读 | 四种 |
课件那张表按 SQL 标准填,InnoDB 的可重复读连幻象读也挡得住,那一格该打勾。
乐观并发控制赌不会冲突,冲突了再回滚。悲观并发控制先加锁再动手。