Dùng READ COMMITTED (PostgreSQL default) cho hầu hết cases; REPEATABLE READ khi cần consistent reads trong transaction; SERIALIZABLE chỉ khi thực sự cần — PostgreSQL dùng MVCC nên readers không block writers.
- Isolation levels kiểm soát visibility giữa concurrent transactions và loại anomaly có thể xảy ra.
- Dirty Read (READ UNCOMMITTED): transaction A đọc data chưa committed của transaction B — B sau đó rollback, A đã đọc data sai; không có DB production nào recommend dùng.
- Non-repeatable Read (READ COMMITTED — default PostgreSQL): transaction A đọc row, transaction B update và commit, A đọc lại cùng row thấy giá trị khác.
- Phantom Read (REPEATABLE READ — default MySQL InnoDB): transaction A query với WHERE condition, B insert row mới thỏa condition và commit, A query lại thấy row mới (phantom).
- SERIALIZABLE: không có anomaly nào — transactions chạy như tuần tự, highest isolation, lowest concurrency.
- PostgreSQL implementation dùng MVCC (Multi-Version Concurrency Control): mỗi transaction thấy snapshot của database tại thời điểm bắt đầu — readers không block writers và ngược lại; PostgreSQL MVCC giúp READ COMMITTED và REPEATABLE READ không cần shared read locks.
- Serializable Snapshot Isolation (SSI) trong PostgreSQL: detect serialization conflicts mà không cần exclusive locks — ít deadlocks hơn traditional 2PL.
- Practical advice: dùng READ COMMITTED cho hầu hết cases, REPEATABLE READ khi cần consistent reads trong transaction, SERIALIZABLE chỉ khi thực sự cần.