Trở về
Ví dụ: 2 người cùng truy cập bảng
Thứ Sáu, 27 tháng 6, 2025
Điều khiển truy xuất đồng thời - phần 2
Đăng bởi

Farm in Brittany - Paul Sérusier (1890)
Transaction Isolation Level
Transaction Isolation Level là những mức cô lập giúp developer định nghĩa, điều khiển cách sử dụng cơ chế khoá ở tầng database.
Mức cô lập định nghĩa những hành động sau:
- Có khoá hay không khi đọc dữ liệu và loại khoá nào sẽ được xin.
- Giữ khoá đọc bao lâu.
- Yêu cầu đọc sẽ ảnh hưởng tới các transaction khác như thế nào.
Chọn một mức cô lập
- Mức cô lập càng thấp thì tốc độ đọc càng cao, đổi lại tính nhất quán sẽ thấp.
- Ngược lại, mức cô lập cao sẽ đảm bảo tính nhất quán nhưng tốc độ đọc/ghi sẽ giảm.
Bảng so sánh Isolation Levels
Isolation Level | Dirty Read | Non-repeatable Read | Phantom Read | Ghi chú đơn giản |
---|---|---|---|---|
Read Uncommitted | ✅ | ✅ | ✅ | Nhanh nhất, ít khoá – có thể đọc dữ liệu chưa commit từ transaction khác |
Read Committed | ❌ | ✅ | ✅ | Mỗi lần đọc là dữ liệu đã commit – tránh dirty read nhưng vẫn bị thay đổi dữ liệu |
Repeatable Read | ❌ | ❌ | ✅ | Giữ khoá đọc tới cuối transaction – dữ liệu đọc không thay đổi, nhưng có thể có bản ghi mới xuất hiện |
Serializable | ❌ | ❌ | ❌ | Cô lập tuyệt đối – như thể các transaction chạy lần lượt, nhưng chậm hơn nhiều |
Minh hoạ đơn giản
accounts
Ví dụ: 2 người cùng truy cập bảng -- Transaction A
BEGIN;
SELECT balance FROM accounts WHERE id = 1;
-- Transaction B
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;
Isolation Level | Điều gì xảy ra? |
---|---|
Read Uncommitted | Người 1 có thể thấy balance thay đổi dù Transaction B chưa commit (Dirty Read) |
Read Committed | Người 1 sẽ chỉ thấy dữ liệu sau khi Transaction B commit |
Repeatable Read | Nếu người 1 đọc lại balance , giá trị sẽ không thay đổi trong cùng 1 transaction |
Serializable | Transaction B phải đợi Transaction A kết thúc mới được chạy |