← Tất cả bài viết

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

  1. READ UNCOMMITTED: cho phép cả dirty read (PostgreSQL không thực sự hỗ trợ mức này)
  2. READ COMMITTED: mặc định của PostgreSQL — chặn dirty read
  3. REPEATABLE READ: chặn thêm non-repeatable read
  4. SERIALIZABLE: 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.