Hiểu Chuẩn ACID & Transaction: Đừng Để Database Của Bạn 'Toang' Vì Lỗi Cơ Bản!

Published: (May 8, 2026 at 11:00 PM EDT)
4 min read
Source: Dev.to

Source: Dev.to

Transaction là gì?

Transaction là một tập hợp các thao tác (đọc, ghi, cập nhật, xóa) được gom lại và xử lý như một đơn vị logic duy nhất. Mục tiêu của nó là đưa database từ một trạng thái hợp lệ này sang một trạng thái hợp lệ khác. Nguyên tắc sống còn của giao dịch là: hoặc hoàn tất tất cả các thao tác của nó, hoặc không thực hiện thao tác nào cả.

Ví dụ kinh điển: chuyển tiền từ tài khoản tiết kiệm sang tài khoản vãng lai. Thao tác này gồm 2 bước:

  1. Trừ tiền từ tài khoản tiết kiệm.
  2. Cộng tiền vào tài khoản vãng lai.

Nếu trừ tiền xong mà bị lỗi mạng, chưa kịp cộng thì sao? Transaction sẽ tự động rollback toàn bộ, hoàn lại tiền cho tài khoản tiết kiệm.

Nguyên tắc ACID

Thành phầnMô tả
A – Atomicity (Tính nguyên tử)Giao dịch là một khối không thể chia cắt. Chỉ có trạng thái BẬT (thành công toàn bộ) hoặc TẮT (hủy bỏ toàn bộ).
C – Consistency (Tính nhất quán)Giao dịch phải đưa cơ sở dữ liệu từ trạng thái hợp lệ này sang trạng thái hợp lệ khác, tuân thủ mọi ràng buộc (khóa chính, khóa ngoại…).
I – Isolation (Tính độc lập)Các giao dịch chạy đồng thời không can thiệp hay “giẫm chân” lên nhau. Mỗi giao dịch hoạt động như thể nó là giao dịch duy nhất đang chạy.
D – Durability (Tính bền vững)Khi giao dịch đã commit thành công, các thay đổi sẽ tồn tại vĩnh viễn trên đĩa cứng, ngay cả khi máy chủ sập nguồn.

Vòng đời tiêu chuẩn của một Transaction

  1. BEGIN TRANSACTION – Đánh dấu điểm bắt đầu của một chuỗi thao tác.
  2. Thực thi các lệnh SQL – INSERT, UPDATE, DELETE (dữ liệu thường nằm trong bộ nhớ đệm hoặc log).
  3. COMMIT TRANSACTION – Nếu tất cả các thao tác thành công, ghi chốt dữ liệu xuống đĩa.
  4. ROLLBACK TRANSACTION – Nếu có bất kỳ lỗi nào, hoàn tác tất cả các thay đổi để đưa database về trạng thái trước đó.

Ví dụ thực tế (SQL)

START TRANSACTION;

UPDATE TaiKhoan SET SoDu = SoDu - 100000 WHERE ID = 'TK001';
UPDATE TaiKhoan SET SoDu = SoDu + 100000 WHERE ID = 'TK002';

-- Kiểm tra điều kiện (pseudo-code)
IF (Lỗi Xảy Ra) THEN
    ROLLBACK;
ELSE
    COMMIT;
END IF;

Khi nào nên dùng ACID?

  • Hệ thống tài chính và ngân hàng (chuyển khoản, quản lý sổ cái).
  • Thương mại điện tử (xử lý đơn hàng, quản lý kho).
  • Hệ thống quản lý dữ liệu nhạy cảm (hồ sơ y tế, thông tin cá nhân).
  • Các ứng dụng nghiệp vụ cốt lõi (ERP, CRM).

Khi nào không nên “ép” dùng ACID?

  • Hệ thống đòi hỏi thông lượng cực cao và độ trễ cực thấp (phân tích log, xử lý Big Data thời gian thực).
  • Hệ thống phân tán quy mô lớn, vì duy trì ACID trên các cụm máy chủ phân tán rất phức tạp và tốn tài nguyên.

Khái niệm BASE trong NoSQL

BASE (Basically Available, Soft state, Eventually consistent) ưu tiên tính khả dụng và khả năng mở rộng, chấp nhận sự không nhất quán dữ liệu trong một khoảng thời gian ngắn.
Ví dụ: bấm “Like” một bài viết trên mạng xã hội; việc cập nhật số lượt Like có thể mất vài giây để đồng bộ trên toàn bộ hệ thống – điều này hoàn toàn chấp nhận được (eventually consistent).

Kết luận

ACID và Transaction là kiến thức nền tảng bắt buộc để thiết kế một hệ thống vững chãi. Nắm vững nguyên lý này giúp đưa ra quyết định kiến trúc đúng đắn: khi nào cần siết chặt tính nhất quán (ACID), khi nào cần nới lỏng để tăng tốc độ và mở rộng (BASE).

Bạn đã bao giờ gặp bug liên quan đến dữ liệu rác hay thiết kế sai Transaction chưa? Hãy chia sẻ dưới comment nhé! 👇

🔥 Khám phá thêm: nếu muốn luyện thêm nội công về Database, SQL JOIN hay các kỹ thuật Backend, hãy ghé thăm blog ITPrep để đọc thêm nhiều bài viết thực chiến cực chất!

0 views
Back to Blog

Related posts

Read more »