<tech-stash />
HomeBlogDSASnippetsAbout
Đăng nhập
© 2026 Thai Bao — Tech Stash
BlogSnippetsAboutRSS
Quay lại Blog
DatabaseSQLArchitectureBackendBasics

ACID là gì? Bốn nguyên tắc "vàng" sống còn của Cơ sở dữ liệu

5 tháng 6, 20265 phút đọc

Hãy tưởng tượng một kịch bản thảm họa: Bạn dùng app ngân hàng để chuyển 10 triệu VNĐ cho một người bạn. Dưới góc độ Database, hệ thống sẽ phải làm 2 bước:

  1. Trừ 10 triệu từ tài khoản của bạn.

  2. Cộng 10 triệu vào tài khoản người bạn kia.

Hệ thống vừa chạy xong Bước 1 (tiền bạn đã bị trừ), thì... RỤP! Cột điện ngoài phố nổ, máy chủ ngân hàng sập nguồn. Kết quả: Bạn mất 10 triệu, bạn của bạn không nhận được đồng nào. Tiền bốc hơi khỏi thế giới thực!

Để những thảm họa này không bao giờ xảy ra, các Cơ sở dữ liệu quan hệ (như PostgreSQL, MySQL) đã nhóm các câu lệnh liên quan lại với nhau thành một khối gọi là Transaction (Giao dịch). Và một Transaction muốn tồn tại, nó BẮT BUỘC phải vượt qua bài kiểm tra ACID.

ACID là gì?

ACID không phải là axit, nó là viết tắt của 4 từ khóa cốt lõi định hình nên sự an toàn của hệ thống dữ liệu: Atomicity, Consistency, Isolation, và Durability.

1. A - Atomicity (Tính Nguyên tử: Tất cả hoặc Không gì cả)

Nguyên tử là đơn vị vật chất nhỏ nhất không thể chia tách. Trong Database, tính Atomicity ép buộc một Transaction (dù chứa 100 câu lệnh SQL đi chăng nữa) cũng phải được coi là một khối thống nhất.

  • Thành công: Khi và chỉ khi TẤT CẢ các câu lệnh trong khối chạy thành công (COMMIT).

  • Thất bại: Nếu chỉ 1 câu lệnh bị lỗi, hoặc máy chủ sập giữa chừng, toàn bộ các câu lệnh đã chạy trước đó sẽ bị hoàn tác về trạng thái gốc (ROLLBACK).

Trở lại ví dụ chuyển tiền, nhờ tính Atomicity, nếu Bước 2 lỗi, Bước 1 sẽ lập tức bị Rollback. Tiền 10 triệu sẽ quay trở lại tài khoản của bạn. Không bao giờ có trạng thái "lửng lơ".

SQL

code.sql
BEGIN TRANSACTION;
  UPDATE accounts SET balance = balance - 10 WHERE user = 'A';
  -- Nếu máy chủ sập ở đây, lệnh trên sẽ bị hủy bỏ hoàn toàn
  UPDATE accounts SET balance = balance + 10 WHERE user = 'B';
COMMIT;

2. C - Consistency (Tính Nhất quán: Tôn trọng luật pháp)

Tính nhất quán đảm bảo rằng Database của bạn sẽ luôn đi từ một "trạng thái hợp lệ này" sang một "trạng thái hợp lệ khác". Mọi dữ liệu ghi vào phải tuân thủ tuyệt đối các ràng buộc (Constraints) mà bạn đã định nghĩa.

  • Ví dụ: Bạn cấu hình cột balance (số dư) có ràng buộc là CHECK (balance >= 0) (Không được âm tiền).

  • Nếu một Transaction cố tình trừ tiền làm cho số dư của bạn xuống mức -5 triệu, Database sẽ lập tức tuýt còi, từ chối giao dịch và văng lỗi. Nó bảo vệ hệ thống khỏi những dữ liệu rác, phi logic.

3. I - Isolation (Tính Cách ly: Việc ai nấy làm)

Trong thực tế, một Database lớn phải xử lý hàng ngàn Transactions cùng lúc (Concurrent). Tính Isolation đảm bảo rằng: Các giao dịch chạy song song không được phép dẫm chân hay nhìn trộm dữ liệu đang làm dở của nhau.

  • Kịch bản lỗi (Race Condition): Bạn và vợ bạn cùng cầm 2 điện thoại, đăng nhập cùng 1 tài khoản có đúng 10 triệu, và cùng bấm nút "Rút tiền 10 triệu" ở cùng một mili-giây.

  • Cơ chế Isolation: Nhờ tính cách ly, Database sẽ xếp hàng 2 giao dịch này. Khi giao dịch của bạn bắt đầu, Database sẽ "Khóa" (Lock) dòng dữ liệu tài khoản đó lại. Giao dịch của vợ bạn sẽ phải đứng chờ. Khi bạn rút xong (số dư còn 0), khóa được mở, giao dịch của vợ bạn mới được chạy tiếp, nhưng lúc này số dư là 0, hệ thống báo lỗi không đủ tiền. Sẽ không bao giờ có chuyện ngân hàng bị lỗi xuất ra 20 triệu!

4. D - Durability (Tính Bền vững: Khắc vào đá)

Bạn bấm nút thanh toán xong. Màn hình hiện lên chữ "Thành công". Một giây sau máy chủ nổ tung. Liệu dữ liệu của bạn có mất không?

Tính Durability cam kết: Một khi Transaction đã được báo là COMMIT thành công, dữ liệu đó đã được ghi vĩnh viễn vào ổ cứng vật lý (Non-volatile memory).

  • Ma thuật dưới nền: Database không ghi thẳng dữ liệu vào Table ngay lập tức (vì ghi ổ cứng rất chậm). Thay vào đó, nó ghi nhanh vào một tệp nhật ký gọi là WAL (Write-Ahead Log). Nếu máy chủ sập, khi khởi động lại, Database chỉ cần lấy tệp WAL ra đọc và khôi phục lại y xì đúc trạng thái trước khi sập. Bền vững tuyệt đối!

Tổng kết

Việc hiểu sâu về ACID sẽ giúp bạn nhận ra tại sao các Cơ sở dữ liệu quan hệ (SQL/RDBMS) như PostgreSQL hay MySQL lại đáng tin cậy đến vậy trong các hệ thống Tài chính, Ngân hàng, Y tế.

Tuy nhiên, sự an toàn tuyệt đối luôn đi kèm với cái giá phải trả: Tốc độ và Khả năng mở rộng (Scalability). Việc liên tục "Khóa" (Lock) dữ liệu để đảm bảo tính Cách ly (Isolation) khiến SQL gặp nghẽn cổ chai khi có hàng triệu user truy cập. Đó là lý do thế giới sinh ra các hệ cơ sở dữ liệu NoSQL (như MongoDB, Cassandra) - những kẻ sẵn sàng "hy sinh" một phần nguyên tắc ACID để đổi lấy tốc độ và sức mạnh mở rộng khổng lồ!

Bình luận

Đăng nhập để bình luận
Đang tải bình luận...
On this page
  • ACID là gì?
  • 1. A - Atomicity (Tính Nguyên tử: Tất cả hoặc Không gì cả)
  • 2. C - Consistency (Tính Nhất quán: Tôn trọng luật pháp)
  • 3. I - Isolation (Tính Cách ly: Việc ai nấy làm)
  • 4. D - Durability (Tính Bền vững: Khắc vào đá)
  • Tổng kết