JuniorKỹ thuậtSQL
Giải thích ACID qua ví dụ chuyển tiền ngân hàng
Thử trả lời trước
Đáp án mẫu
ACID là bốn đảm bảo của một transaction trong database. Ví dụ chuyển 100 từ tài khoản 1 sang tài khoản 2 cho thấy từng đảm bảo.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1 AND balance >= 100;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
- Atomicity: hai câu update hoặc cùng xảy ra, hoặc không câu nào xảy ra. Nếu câu thứ hai lỗi thì câu thứ nhất bị rollback.
- Consistency: transaction đưa dữ liệu từ trạng thái hợp lệ này sang trạng thái hợp lệ khác. Các constraint như
CHECK (balance >= 0)luôn đúng và tổng số tiền không đổi. - Isolation: các lần chuyển tiền đồng thời không nhìn thấy phần việc dang dở của nhau. Mức độ nghiêm ngặt phụ thuộc vào isolation level.
- Durability: khi
COMMITtrả về, kết quả vẫn còn sau khi crash, vì thay đổi đã nằm trong write-ahead log trên đĩa.
Atomicity và durability đến từ transaction log. Isolation đến từ locking hoặc multi-version concurrency control. Consistency là trách nhiệm chung của các constraint bạn khai báo và logic của ứng dụng.
Ý chính
- Atomicity nghĩa là mọi câu lệnh cùng commit hoặc không câu nào commit
- Consistency giữ cho constraint và invariant luôn hợp lệ
- Isolation che các thay đổi đang dở khỏi transaction khác
- Durability đến từ write-ahead log
Câu hỏi nối tiếp thường gặp
- Ở READ COMMITTED vẫn có thể xảy ra anomaly nào?
Lỗi thường gặp
- Nghĩ rằng consistency hoàn toàn do database đảm bảo
- Cho rằng isolation nghĩa là các transaction chạy lần lượt từng cái