Cơ sở dữ liệu là gì?
Cơ sở dữ liệu (database) là một tập hợp dữ liệu có tổ chức được lưu trên máy tính để chương trình tìm, thêm, sửa và xóa nhanh chóng, an toàn. Nó được quản lý bởi phần mềm gọi là hệ quản trị cơ sở dữ liệu (DBMS), như PostgreSQL, MySQL, SQLite hay MongoDB.
Cập nhật 24 tháng 9, 2026
Khi bạn đăng nhập vào một trang web, trang đó phải tìm ra tài khoản của bạn giữa hàng triệu tài khoản khác, kiểm tra mật khẩu và tải các thiết lập, tất cả trong vài mili giây. Nó không mở một tệp văn bản rồi đọc từng dòng. Nó gửi một yêu cầu như SELECT * FROM users WHERE email = 'ana@example.com' đến cơ sở dữ liệu, và cơ sở dữ liệu nhảy thẳng tới đúng hàng nhờ một chỉ mục (index), giống như phần mục lục ở cuối một cuốn sách.
Cơ sở dữ liệu hoạt động thế nào
Có hai thành phần làm việc cùng nhau. Cơ sở dữ liệu là dữ liệu, được tổ chức theo một cấu trúc cố định. Hệ quản trị cơ sở dữ liệu (DBMS) là chương trình lưu dữ liệu đó vào tệp, giữ cho nó nhất quán và trả lời các yêu cầu. PostgreSQL, MySQL và SQLite là các DBMS; danh sách khách hàng của bạn là cơ sở dữ liệu.
Trong cơ sở dữ liệu quan hệ, dữ liệu nằm trong các bảng. Mỗi bảng có các cột (tên, quốc gia, điểm) và các hàng (mỗi người dùng một hàng). Một yêu cầu đi qua các bước sau:
- Chương trình của bạn gửi một truy vấn, thường viết bằng SQL (Structured Query Language).
- DBMS phân tích truy vấn và lên kế hoạch trả lời: đọc những bảng nào, có dùng được chỉ mục để bỏ qua phần lớn các hàng không.
- Nó đọc dữ liệu từ ổ đĩa theo từng trang có kích thước cố định (mặc định 4.096 byte trong SQLite, 8 KB trong PostgreSQL), và giữ những trang hay dùng trong bộ nhớ.
- Nó lọc, sắp xếp và kết hợp các hàng, rồi trả về kết quả.
Python có sẵn SQLite, nên bạn có thể chạy một cơ sở dữ liệu thật ngay tại đây:
Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5
Chương trình không hề nói phải tìm kiếm thế nào. Nó mô tả kết quả mình muốn, còn DBMS quyết định cách lấy kết quả đó. Đây là khác biệt chính giữa việc hỏi một cơ sở dữ liệu và việc viết một vòng lặp duyệt qua list.
Các loại cơ sở dữ liệu
| Loại | Lưu dữ liệu dưới dạng | Ví dụ | Cách dùng điển hình |
|---|---|---|---|
| Quan hệ (SQL) | Bảng gồm hàng và cột, liên kết bằng khóa | PostgreSQL, MySQL, SQLite, Oracle, SQL Server | Người dùng, đơn hàng, thanh toán: hầu hết các ứng dụng |
| Tài liệu | Tài liệu dạng JSON | MongoDB, Firestore, CouchDB | Bản ghi có các trường khác nhau giữa bản này với bản kia |
| Key-value | Giá trị được tra theo một khóa | Redis, DynamoDB | Bộ nhớ đệm, phiên đăng nhập, bộ đếm |
| Wide-column | Hàng với các cột linh hoạt, trải trên nhiều máy chủ | Cassandra, HBase | Lượng ghi cực lớn |
| Đồ thị | Các nút và quan hệ giữa chúng | Neo4j | Mạng xã hội, gợi ý |
| Chuỗi thời gian | Số đo được đánh chỉ mục theo thời gian | InfluxDB, TimescaleDB | Số liệu giám sát, dữ liệu cảm biến |
| Vector | Danh sách các số (embedding) | pgvector, Pinecone, Milvus | Tìm kiếm tương đồng cho tính năng AI |
Mọi loại không phải quan hệ thường được gom chung là NoSQL. Cơ sở dữ liệu quan hệ vẫn là lựa chọn mặc định cho hầu hết ứng dụng, vì bảng, ràng buộc và SQL giải quyết tốt rất nhiều loại bài toán. Nhiều sản phẩm còn kết hợp các loại: PostgreSQL lưu được tài liệu JSON, và pgvector bổ sung tìm kiếm vector cho nó.
Giao dịch: tất cả hoặc không gì cả
Chuyển tiền từ Ana sang Ben cần hai thay đổi: cộng cho Ben, trừ của Ana. Nếu chương trình crash giữa hai bước, tiền tự dưng xuất hiện từ hư không. Giao dịch (transaction) gom các thay đổi lại để hoặc tất cả được lưu, hoặc không thay đổi nào được lưu. Ở đây thay đổi thứ hai vi phạm một quy tắc (số dư không được âm), nên cơ sở dữ liệu hoàn tác luôn thay đổi đầu tiên:
transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}
Khoản 40 của Ben đã được cộng rồi bị rút lại, nên tổng số tiền vẫn khớp. Cơ sở dữ liệu quan hệ cam kết bốn tính chất cho giao dịch, gọi là ACID: nguyên tử (tất cả hoặc không gì cả), nhất quán (các quy tắc như CHECK luôn được giữ), cô lập (hai người dùng chạy giao dịch cùng lúc không nhìn thấy phần việc làm dở của nhau) và bền vững (đã lưu thì thay đổi tồn tại qua cả crash lẫn mất điện).
Cơ sở dữ liệu, bảng tính và tệp
| Tệp văn bản hoặc CSV | Bảng tính | Cơ sở dữ liệu | |
|---|---|---|---|
| Kích thước | Bao nhiêu chương trình của bạn tải nổi | 1.048.576 hàng mỗi trang tính trong Excel | Hàng tỷ hàng |
| Nhiều người ghi cùng lúc | Không | Hạn chế | Có, nhờ khóa và giao dịch |
| Tìm một bản ghi | Đọc cả tệp | Lọc hoặc tìm kiếm | Tra chỉ mục |
| Quy tắc cho dữ liệu | Không có | Kiểm tra hợp lệ tùy chọn | Kiểu, ràng buộc, khóa ngoại |
| Đặt câu hỏi | Tự viết code | Công thức | SQL hoặc API truy vấn |
Bảng tính là công cụ tốt khi một người xem vài nghìn hàng. Khi nhiều chương trình hoặc nhiều người dùng cùng ghi dữ liệu một lúc, hoặc dữ liệu phải tuân theo quy tắc, cơ sở dữ liệu mới là công cụ phù hợp.
Cơ sở dữ liệu bảo vệ dữ liệu thế nào
DBMS ghi mỗi thay đổi vào một nhật ký trước khi động đến các tệp dữ liệu (write-ahead log), nên sau một lần crash nó có thể chạy lại hoặc hoàn tác phần việc còn dở. PostgreSQL có thể lưu một checksum trên mỗi trang 8 KB và báo lỗi checksum khi một ổ đĩa sắp hỏng trả về dữ liệu bị hư. Người dùng và quyền truy cập quyết định ai được đọc hoặc sửa bảng nào, còn cơ chế nhân bản giữ các bản sao trên những máy chủ khác. Chương trình cũng phải truyền dữ liệu người dùng nhập vào dưới dạng tham số, như các placeholder ? ở trên, không bao giờ dán thẳng vào câu SQL, vì đó chính là cách các cuộc tấn công SQL injection xảy ra.
Những hiểu lầm thường gặp
- "SQL là một cơ sở dữ liệu." SQL là ngôn ngữ. PostgreSQL, MySQL và SQLite là những cơ sở dữ liệu hiểu ngôn ngữ đó.
- "NoSQL nghĩa là hoàn toàn không có SQL." Thuật ngữ này thường được hiểu là "not only SQL" (không chỉ SQL), và nhiều cơ sở dữ liệu NoSQL có ngôn ngữ truy vấn trông giống SQL, như CQL của Cassandra.
- "Cơ sở dữ liệu lúc nào cũng là một máy chủ lớn." SQLite là một tệp duy nhất được chương trình mở trực tiếp, không cần máy chủ nào cả. Nó chạy bên trong mọi điện thoại Android và iOS.
- "Dữ liệu trong cơ sở dữ liệu an toàn mãi mãi." Cơ sở dữ liệu bảo vệ trước crash, không bảo vệ trước việc ai đó lỡ tay chạy
DELETE. Vẫn cần sao lưu.
Học tiếp ở đâu
Khóa học SQL dạy truy vấn từ câu SELECT đầu tiên. Tài liệu SQLite đi qua các bước tiếp theo: SQLite là gì, tạo bảng, chỉ mục và phòng chống SQL injection. Để xem dữ liệu được sắp xếp trên ổ đĩa thế nào, hãy đọc byte là gì, còn checksum giải thích cách phát hiện các trang bị hỏng.
Câu hỏi thường gặp
Nói đơn giản, cơ sở dữ liệu là gì?
Cơ sở dữ liệu là nơi chương trình cất thông tin để tìm lại thật nhanh. Hãy hình dung một tủ hồ sơ có mục lục hoàn hảo: bạn hỏi "mọi đơn hàng tuần trước" và nhận câu trả lời trong vài mili giây, kể cả khi có hàng triệu bản ghi.
Ví dụ về cơ sở dữ liệu là gì?
Danh bạ trên điện thoại của bạn được lưu trong một cơ sở dữ liệu: cả Android lẫn iOS đều có sẵn SQLite. Ngân hàng lưu tài khoản khách hàng trong một cơ sở dữ liệu như Oracle hoặc PostgreSQL, còn Wikipedia lưu các bài viết trong MariaDB. Một cửa hàng online lưu sản phẩm, khách hàng và đơn hàng trong các bảng liên kết với nhau.
Bốn loại cơ sở dữ liệu là gì?
Không có danh sách bốn loại chính thức nào. Bốn loại hay được nhắc nhất là cơ sở dữ liệu quan hệ (bảng và SQL), cơ sở dữ liệu tài liệu (bản ghi dạng JSON), kho key-value (giá trị được tra theo khóa) và cơ sở dữ liệu đồ thị (nút và quan hệ). Các giáo trình cũ hơn còn liệt kê cơ sở dữ liệu phân cấp và cơ sở dữ liệu mạng.
5 cơ sở dữ liệu phổ biến nhất là gì?
Oracle, MySQL, Microsoft SQL Server, PostgreSQL và MongoDB đã giữ năm vị trí đầu trong bảng xếp hạng độ phổ biến DB-Engines nhiều năm liền. Trong giới lập trình viên, PostgreSQL là cơ sở dữ liệu được dùng nhiều nhất trong khảo sát Stack Overflow Developer Survey từ năm 2023, còn SQLite là cơ sở dữ liệu được triển khai rộng rãi nhất, vì nó có sẵn trong điện thoại và trình duyệt.
Cơ sở dữ liệu và DBMS khác nhau thế nào?
Cơ sở dữ liệu là chính dữ liệu, được tổ chức thành bảng hoặc tài liệu. DBMS là phần mềm lưu dữ liệu đó trên ổ đĩa và trả lời các yêu cầu truy xuất, như PostgreSQL hay MySQL. Người ta thường gọi chung cả hai là "cơ sở dữ liệu".
Có cần học SQL để dùng cơ sở dữ liệu không?
Với cơ sở dữ liệu quan hệ thì có: SQL là cách bạn tạo bảng và đặt câu hỏi cho dữ liệu, và phần cơ bản chỉ mất vài ngày để học. Nhiều chương trình dùng một thư viện viết SQL thay bạn, nhưng biết SQL giúp bạn hiểu dễ hơn nhiều thư viện đó đang làm gì và vì sao một truy vấn chạy chậm.