Reference · Cheat sheet
The one-page compressed essence: a plain read is a lock-free MVCC snapshot, and the isolation level just times it.
Plain SELECT = consistent nonlocking read: MVCC serves a point-in-time
snapshot, sets no locks. Readers don't block writers. The
isolation level only decides when the snapshot is taken.
| Level | Snapshot | Allows |
|---|---|---|
| READ UNCOMMITTED | even uncommitted | dirty · non-repeatable · phantom |
| READ COMMITTED | fresh per statement | non-repeatable · phantom |
| REPEATABLE READ (default) | fixed at first read | phantom* (largely prevented) |
| SERIALIZABLE | RR + locking reads | nothing |
* InnoDB's REPEATABLE READ prevents phantoms for plain SELECT (they're not in the first-read snapshot) and, for locking reads, via next-key locks (Lesson 0006).
| dirty read | read another txn's uncommitted change |
| non-repeatable read | same row read twice → different (committed UPDATE between) |
| phantom read | same WHERE twice → new rows (committed INSERT between) |
Source: MySQL 8.0 Manual — Isolation Levels · Consistent Nonlocking Reads · All lessons