Transaction và các mức cô lập (isolation level) trong SQL
22/07/2026
Transaction gói nhiều câu lệnh thành một đơn vị tất-cả-hoặc-không. Nhưng khi nhiều transaction chạy song song, chúng có thể giẫm chân nhau. Mức cô lập (isolation level) quyết định mức độ chúng nhìn thấy nhau.
ACID trong một câu
- Atomicity: hoặc tất cả commit, hoặc rollback hết
- Consistency: dữ liệu luôn thoả ràng buộc trước và sau
- Isolation: transaction song song không phá kết quả của nhau
- Durability: đã commit thì tồn tại kể cả khi mất điện
Ba hiện tượng bất thường
- Dirty read: đọc dữ liệu transaction khác chưa commit
- Non-repeatable read: đọc lại cùng một dòng ra giá trị khác
- Phantom read: chạy lại cùng truy vấn ra thêm/bớt dòng
Bốn mức cô lập
READ UNCOMMITTED: cho phép cả dirty read (PostgreSQL không thực sự hỗ trợ mức này)READ COMMITTED: mặc định của PostgreSQL — chặn dirty readREPEATABLE READ: chặn thêm non-repeatable readSERIALIZABLE: chặt nhất, như thể các transaction chạy tuần tự
Mức càng cao càng đúng nhưng càng dễ xung đột/khoá và chậm hơn. Bắt đầu với mặc định READ COMMITTED, chỉ nâng lên khi thật sự cần bảo đảm mạnh hơn.
👉 Dùng thử công cụ liên quan trên dev-hub: SQL Formatter — chạy hoàn toàn trong trình duyệt, không gửi dữ liệu lên server.