Menu
CoddyTech

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.

Tác giả Kevin Spektor, Co-founder & CTO

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:

  1. 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).
  2. 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.
  3. 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ớ.
  4. 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ạiLưu dữ liệu dưới dạngVí 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óaPostgreSQL, MySQL, SQLite, Oracle, SQL ServerNgười dùng, đơn hàng, thanh toán: hầu hết các ứng dụng
Tài liệuTài liệu dạng JSONMongoDB, Firestore, CouchDBBản ghi có các trường khác nhau giữa bản này với bản kia
Key-valueGiá trị được tra theo một khóaRedis, DynamoDBBộ nhớ đệm, phiên đăng nhập, bộ đếm
Wide-columnHàng với các cột linh hoạt, trải trên nhiều máy chủCassandra, HBaseLượng ghi cực lớn
Đồ thịCác nút và quan hệ giữa chúngNeo4jMạng xã hội, gợi ý
Chuỗi thời gianSố đo được đánh chỉ mục theo thời gianInfluxDB, TimescaleDBSố liệu giám sát, dữ liệu cảm biến
VectorDanh sách các số (embedding)pgvector, Pinecone, MilvusTì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 CSVBảng tínhCơ sở dữ liệu
Kích thướcBao nhiêu chương trình của bạn tải nổi1.048.576 hàng mỗi trang tính trong ExcelHàng tỷ hàng
Nhiều người ghi cùng lúcKhôngHạn chếCó, nhờ khóa và giao dịch
Tìm một bản ghiĐọc cả tệpLọc hoặc tìm kiếmTra chỉ mục
Quy tắc cho dữ liệuKhông cóKiểm tra hợp lệ tùy chọnKiểu, ràng buộc, khóa ngoại
Đặt câu hỏiTự viết codeCông thứcSQL 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.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu