Các Thuộc tính ACID trong Cơ sở dữ liệu
ACID là gì?
ACID là tập hợp bốn thuộc tính đảm bảo các giao dịch cơ sở dữ liệu (Database Transactions) được xử lý đáng tin cậy. Các thuộc tính này đảm bảo tính toàn vẹn dữ liệu (Data Integrity) ngay cả khi xảy ra lỗi hệ thống, sập hoặc truy cập đồng thời.

Tính Nguyên tử (Atomicity)
Các thao tác ghi (Writes) trong một giao dịch (Transaction) được thực thi tất cả cùng lúc và không thể chia thành các phần nhỏ hơn. Nếu có lỗi khi thực thi giao dịch, các thao tác ghi sẽ được hoàn tác (Rolled Back).
Vì vậy, Atomicity có nghĩa là "tất cả hoặc không có gì" (All or Nothing).
Cách hoạt động
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- Nếu thất bại ở đây, UPDATE đầu tiên sẽ được hoàn tác
COMMIT;
- Cơ sở dữ liệu sử dụng Nhật ký giao dịch (Write-Ahead Log/WAL) để theo dõi các thay đổi
- Nếu giao dịch thất bại hoặc bị hoàn tác, cơ sở dữ liệu sẽ hoàn nguyên tất cả các thay đổi một phần (Partial Changes)
- Client không bao giờ thấy một giao dịch hoàn thành một phần (Partially Completed Transaction)
Tính Nhất quán (Consistency)
Khác với "tính nhất quán" trong Định lý CAP (nghĩa là mọi lần đọc đều nhận được lần ghi gần nhất hoặc một lỗi), ở đây Consistency có nghĩa là bảo toàn các bất biến cơ sở dữ liệu (Database Invariants). Bất kỳ dữ liệu nào được ghi bởi giao dịch phải hợp lệ theo tất cả các quy tắc đã định nghĩa và duy trì cơ sở dữ liệu ở trạng thái tốt.
Cách hoạt động
- Ràng buộc (Constraints) —
NOT NULL,UNIQUE,CHECK,FOREIGN KEYthực thi các quy tắc - Trigger — logic xác thực tùy chỉnh trước/sau khi ghi
- Kiểm tra ở mức ứng dụng (Application-level Checks) — quy tắc nghiệp vụ được xác thực trong giao dịch
-- Ràng buộc CHECK đảm bảo số dư không bao giờ âm
CREATE TABLE accounts (
id INT PRIMARY KEY,
balance DECIMAL(10,2) CHECK (balance >= 0)
);
Nếu một giao dịch vi phạm bất kỳ ràng buộc nào, nó sẽ bị từ chối (Rejected) và hoàn tác.
Atomicity đảm bảo rằng một giao dịch là tất cả hoặc không có gì (All or Nothing). Consistency đảm bảo rằng phần "tất cả" chỉ xảy ra nếu kết quả là hợp lệ. Chúng hoạt động cùng nhau: Atomicity ngăn chặn các trạng thái một phần (Partial States), Consistency ngăn chặn các trạng thái không hợp lệ (Invalid States).