Isolation Levels
🔒 Isolation Levels trong MySQL (theo chuẩn SQL)
MySQL (với InnoDB) hỗ trợ 4 cấp độ isolation sau:
READ UNCOMMITTED
✅
✅
✅
READ COMMITTED
❌
✅
✅
REPEATABLE READ (default)
❌
❌
✅
SERIALIZABLE
❌
❌
❌
🧪 1. READ UNCOMMITTED
Thấy cả thay đổi chưa commit từ transaction khác.
Cực kỳ nguy hiểm → Dễ gặp dirty read.
✅ Dùng khi chỉ đọc dữ liệu không quan trọng, không cần chính xác tuyệt đối.
🔍 2. READ COMMITTED (Giống Oracle, SQL Server)
Chỉ thấy dữ liệu đã commit.
Nhưng cùng một query, lần 1 và lần 2 có thể trả về khác nhau → gây non-repeatable read.
✅ An toàn hơn, dùng được trong đa số hệ thống nếu đã xử lý consistency bằng ứng dụng.
♻️ 3. REPEATABLE READ (Mặc định trong InnoDB/MySQL)
Cùng một query trong 1 transaction sẽ luôn thấy dữ liệu như lúc bắt đầu.
Tránh được dirty + non-repeatable read.
Nhưng vẫn bị phantom read (ví dụ: thêm mới row nhưng vẫn match điều kiện
WHERE
sau đó).
⚙️ MySQL dùng MVCC (Multi-Version Concurrency Control) để đảm bảo điều này.
✅ Phù hợp cho đa số hệ thống, mức cân bằng tốt giữa hiệu năng và độ an toàn.
🧱 4. SERIALIZABLE
Gần như chạy từng transaction một.
Dùng locking trên toàn bộ rows/table.
Không bị bất kỳ vấn đề nào về isolation.
❌ Hiệu năng rất thấp nếu concurrency cao. ✅ Dùng trong những nghiệp vụ cực kỳ quan trọng (kiểm toán, tính toán lương cuối tháng,...).
🔄 Cách Cấu Hình Isolation Level trong MySQL
🔧 Kiểm tra mặc định:
✏️ Thay đổi tạm thời (cho session hiện tại):
⚙️ Thay đổi mặc định (cho toàn bộ instance):
🔗 Áp dụng trong Java (Spring + JDBC)
Các giá trị Isolation
trong Spring tương ứng với MySQL:
Isolation.READ_UNCOMMITTED
READ UNCOMMITTED
Isolation.READ_COMMITTED
READ COMMITTED
Isolation.REPEATABLE_READ
REPEATABLE READ
Isolation.SERIALIZABLE
SERIALIZABLE
🧠 Khi nào dùng isolation nào?
Hệ thống báo cáo, dashboard
READ COMMITTED hoặc thấp hơn
Quản lý kho, ví điện tử
REPEATABLE READ
Banking, kế toán, nghiệp vụ nhạy cảm
SERIALIZABLE
Last updated