</>
⌕
Senior #isolation#deadlock#transaction#mvcc

Isolation level và deadlock trong SQL

⚡ Trả lời nhanh

Isolation level quyết định hiện tượng đọc cho phép: dirty read, non-repeatable read, phantom read. Từ READ UNCOMMITTED đến SERIALIZABLE càng chặt càng ít bất thường nhưng giảm đồng thời. Deadlock xảy ra khi hai transaction giữ lock chờ nhau; tránh bằng thứ tự lock nhất quán, transaction ngắn, retry.

LevelDirty readNon-repeatablePhantom
READ UNCOMMITTEDcó thểcó thểcó thể
READ COMMITTEDkhôngcó thểcó thể
REPEATABLE READkhôngkhôngcó thể (theo chuẩn)
SERIALIZABLEkhôngkhôngkhông

Thực tế khác chuẩn: PostgreSQL REPEATABLE READ (snapshot) không có phantom; MySQL InnoDB mặc định REPEATABLE READ dùng gap lock; mặc định PostgreSQL/Oracle là READ COMMITTED.

T1: UPDATE accounts SET ... WHERE id = 1;   -- giữ lock row 1
T2: UPDATE accounts SET ... WHERE id = 2;   -- giữ lock row 2
T1: UPDATE accounts SET ... WHERE id = 2;   -- chờ T2
T2: UPDATE accounts SET ... WHERE id = 1;   -- chờ T1 => deadlock

DB phát hiện và huỷ một transaction làm “nạn nhân”.

🃏 Ôn bằng flashcard