Thứ Năm, 18 tháng 9, 2025

ACID trong cơ sở dữ liệu là gì?

Nguồn

 ACID Properties in Databases With Examples

Atomicity (Tính nguyên tử)

Transaction sẽ được thực hiện hoặc không được thực hiện, không có trạng thái trung gian. Nếu một phần của transaction thất bại, toàn bộ transaction sẽ bị rollback như chưa từng xảy ra. Hệ thống quản lý transaction thường sử dụng cơ chế logging để kích hoạt tính năng rollback này.

Ví dụ, bạn đang tạo một ứng dụng ngân hàng để chuyển $100 từ Alice sang Bob. Điều này đồng nghĩa với việc cập nhật hai thứ - trừ $100 từ tài khoản của Alice và cộng $100 vào tài khoản của Bob. Atomicity đảm bảo rằng cả hai cập nhật này sẽ được thực hiện cùng nhau hoặc không thực hiện gì cả.

Nếu một phần nào đó thất bại, hệ thống quản lý transaction sẽ sử dụng logs để hoàn tác bất kỳ thay đổi nào, để bạn không bị mất hoặc thừa tiền. Transaction không thể chia nhỏ, như một nguyên tử vậy.

Consistency (Tính nhất quán)

Transaction phải tuân thủ các quy tắc, đảm bảo dữ liệu luôn ở trạng thái hợp lệ. Bất kỳ dữ liệu nào được ghi trong transaction phải tuân thủ các ràng buộc, trigger và các quy tắc khác mà bạn đã thiết lập. Hệ thống cơ sở dữ liệu sẽ tự động kiểm tra tính nhất quán bằng cách kiểm tra vi phạm ràng buộc trong transaction.

Ví dụ, giả sử bạn có một quy tắc rằng số dư tài khoản người dùng không thể âm. Nếu một transaction cố gắng rút tiền nhiều hơn số dư của người dùng, hệ thống cơ sở dữ liệu sẽ phát hiện vi phạm này và hủy bỏ transaction để giữ cho cơ sở dữ liệu nhất quán. Tính nhất quán ngăn chặn dữ liệu không hợp lệ làm hỏng cơ sở dữ liệu.

Isolation (Tính độc lập)

Các transaction đồng thời sẽ không ảnh hưởng đến nhau, mỗi transaction sẽ chạy như không có transaction nào khác đang chạy.

Cấp độ isolation cao nhất được gọi là "serializable". Nó khiến các transaction chạy lần lượt như thể chúng ở trong một hàng đợi duy nhất. Điều này cung cấp tính nhất quán mạnh nhất, nhưng có thể làm chậm mọi thứ vì mỗi transaction phải chờ tới lượt của mình.

Để tăng tốc độ, cơ sở dữ liệu thường cung cấp các cấp độ isolation thấp hơn cho phép nhiều transaction chạy đồng thời hơn. Nhưng có một vấn đề - các cấp độ thấp này đôi khi dẫn đến sự không nhất quán, như dirty read, non-repeatable read và phantom read.

Dirty read xảy ra khi một transaction nhìn thấy dữ liệu đã bị thay đổi bởi một transaction khác mà chưa được commit. Hãy tưởng tượng một tài khoản ngân hàng với $100. Transaction T1 rút $20 nhưng không commit. Nếu Transaction T2 đọc số dư trước khi T1 commit, nó sẽ thấy $80. Nhưng nếu T1 rollback, số dư $80 đó chưa bao giờ tồn tại - đó là dirty read.

Cấp độ isolation "read committed" ngăn chặn dirty read bằng cách đảm bảo một transaction chỉ có thể nhìn thấy dữ liệu đã commit.

Nhưng vẫn có thể có non-repeatable read, khi một transaction đọc dữ liệu hai lần và nhận kết quả khác nhau vì một transaction khác đã thay đổi dữ liệu giữa hai lần đọc. Ví dụ, bạn kiểm tra số dư tài khoản và thấy $100. Sau đó, một transaction khác rút $50 và commit. Nếu bạn kiểm tra số dư một lần nữa trong cùng một transaction, bạn sẽ thấy $50. Đó là non-repeatable read.

"Read committed" cũng có thể xảy ra phantom read, khi một transaction chạy lại một truy vấn và nhận kết quả khác vì một transaction khác đã thêm hoặc xóa row đó đi. Hãy tưởng tượng một transaction liệt kê tất cả các giao dịch chuyển khoản dưới $100. Trong khi đó, một transaction khác thêm một giao dịch $50 và commit. Nếu transaction đầu chạy lại truy vấn của mình, nó sẽ thấy giao dịch $50 mà trước đó không có - đó là phantom read.

Cấp độ isolation "repeatable read" ngăn chặn non-repeatable read bằng cách cung cấp một snapshot nhất quán của dữ liệu cho mỗi transaction. Nhưng vẫn có thể có phantom read. Vì vậy, các cấp độ isolation thấp hơn hi sinh tính nhất quán để có hiệu suất tốt hơn. Bạn cần chọn sự cân bằng phù hợp cho ứng dụng của mình, cân nhắc giữa tốc độ và sự thiếu nhất quán.

Durability (Tính bền vững)

Khi một transaction được commit, dữ liệu sẽ tồn tại ngay cả khi hệ thống gặp sự cố. Tính bền vững thường được thực hiện thông qua việc ghi transaction logs hoặc sử dụng write-ahead logging (WAL) để lưu thay đổi vào đĩa trước khi xác nhận commit.

Trong cơ sở dữ liệu phân tán, tính bền vững cũng bao gồm việc sao chép dữ liệu qua nhiều node. Vì vậy, nếu một node gặp sự cố, bạn không mất bất kỳ transaction nào đã commit - chúng được lưu trữ an toàn trên các node khác.

Tóm lại: Atomicity đảm bảo transaction toàn vẹn, Consistency giữ dữ liệu hợp lệ, Isolation ngăn chặn sự can thiệp, và Durability giữ cho dữ liệu tồn tại vĩnh viễn.

Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master