[목차]
Transaction Support in SQL
- single SQL statement는 atomic함
- complete하거나 fail 둘 중 하나
- COMMIT or ROLLBACK
- SET TRANSACTION
- Access mode
- Diagnostic size
- 동시에 몇 개까지의 conditions를 hold할 것인지
- Isolation level <isolation>
- <isolation> ⇒ READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE(default)
- 뒤로 갈수록 좀더 엄격한 level 수준
Isolation Levels
Level |
Dirty write |
Dirty read |
Non-repeatable Read |
Phantom Read |
READ UNCOMMITTED |
NO |
YES |
YES |
YES |
READ COMMITTED |
NO |
NO |
YES |
YES |
REPEATABLE READ |
NO |
NO |
NO |
YES |
SERIALIZABLE |
NO |
NO |
NO |
NO |
Problems in Low Isolation Levels
Dirty read
- T1에서 write하고 T2에서 read했는데, T1에서 abort나서 rollback하여 T2에서 read한 값이 incorrect하는 경우
Nonrepeatable read
- T1에서 read하고 T2에서 write하고, T1에서 또 read했는데, 그 값이 달라진 경우
Phantom read
- T1에서 read하고 T2에서 tuple(insert/delete)하고, T1에서 동일 조건으로 read했는데 그 결과(rows)가 달라진 경우
Isolation Levels: Examples