The ANSI/ISO SQL standard defines four levels of transaction isolation. The standard defines these levels of isolation in terms of three phenomena that must be prevented between concurrent transactions. The three phenomena that must be prevented are:
Occur when a transaction reads data written by concurrent uncommitted transaction.
Occur when a transaction re-reads data it has previously read and finds that data has been modified by another transaction (that committed since the initial read).
Occur when a transaction re-executes a query returning a set of rows that satisfy a search condition and finds that the set of rows satisfying the condition has changed due to another recently-committed transaction.
The four isolation levels and the corresponding behaviors are described in the table that follows.
Table 16-1. Transaction Isolation Levels
Isolation Level | Dirty Read | Non-Repeatable Read | Phantom Read |
---|---|---|---|
Read uncommitted | Possible | Possible | Possible |
Read committed | Not possible | Possible | Possible |
Repeatable read | Not possible | Not possible | Possible |
Serializable | Not possible | Not possible | Not possible |
PostgreSQL offers the read committed and serializable isolation levels.