Cơ sở dữ liệu là gì? Bảng, hàng, cột và câu lệnh SQL đầu tiên

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Mọi ứng dụng nghiêm túc đều cần nhớ dữ liệu lâu dài: tài khoản người dùng, đơn hàng, bài viết. Lưu vào biến thì mất khi tắt chương trình, còn lưu file text thì khó tìm kiếm. Cơ sở dữ liệu ra đời để lưu trữ và truy vấn dữ liệu có tổ chức, nhanh chóng và an toàn.

Cơ sở dữ liệu quan hệ

Loại phổ biến nhất lưu dữ liệu trong các bảng (table), giống bảng tính. Mỗi cột (column) là một thuộc tính, mỗi hàng (row) là một bản ghi. Ví dụ bảng hoc_vien:

idtenemailtuoi
1Lanlan@example.com21
2Minhminh@example.com25

Cột id là khóa chính (primary key): giá trị duy nhất giúp phân biệt từng hàng. Các hệ quản trị cơ sở dữ liệu quan hệ nổi tiếng gồm MySQL, PostgreSQL, SQL Server, SQLite.

SQL: ngôn ngữ nói chuyện với cơ sở dữ liệu

SQL (Structured Query Language) là ngôn ngữ chuẩn để tạo bảng, thêm, đọc, sửa, xóa dữ liệu. Bốn thao tác này gọi là CRUD (Create, Read, Update, Delete).

-- Tạo bảng
CREATE TABLE hoc_vien (
  id INTEGER PRIMARY KEY,
  ten TEXT NOT NULL,
  email TEXT,
  tuoi INTEGER
);

-- Thêm dữ liệu
INSERT INTO hoc_vien (id, ten, email, tuoi)
VALUES (1, 'Lan', 'lan@example.com', 21);

-- Đọc dữ liệu
SELECT ten, tuoi FROM hoc_vien WHERE tuoi >= 18 ORDER BY ten;

-- Sửa dữ liệu
UPDATE hoc_vien SET tuoi = 22 WHERE id = 1;

-- Xóa dữ liệu
DELETE FROM hoc_vien WHERE id = 1;

Hãy luôn viết WHERE cho UPDATE và DELETE; quên nó sẽ sửa hoặc xóa toàn bộ bảng.

Quan hệ giữa các bảng

Dữ liệu thật thường liên quan nhau: một học viên đăng ký nhiều khóa học. Thay vì lặp lại thông tin, ta dùng nhiều bảng và nối bằng khóa ngoại (foreign key):

CREATE TABLE dang_ky (
  id INTEGER PRIMARY KEY,
  hoc_vien_id INTEGER,
  khoa_hoc TEXT,
  FOREIGN KEY (hoc_vien_id) REFERENCES hoc_vien(id)
);

SELECT h.ten, d.khoa_hoc
FROM hoc_vien h
JOIN dang_ky d ON d.hoc_vien_id = h.id;

JOIN ghép các hàng từ hai bảng theo điều kiện. Cách tổ chức này giúp tránh trùng lặp và giữ dữ liệu nhất quán.

Thử ngay với Python và SQLite

SQLite là cơ sở dữ liệu nhỏ gọn lưu trong một file, có sẵn trong Python, rất hợp để học:

import sqlite3

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE hv (id INTEGER PRIMARY KEY, ten TEXT)")
con.execute("INSERT INTO hv (ten) VALUES (?)", ("Lan",))
con.execute("INSERT INTO hv (ten) VALUES (?)", ("Minh",))
for hang in con.execute("SELECT id, ten FROM hv"):
    print(hang)
con.close()

Dấu ? là tham số hóa truy vấn. Đừng bao giờ ghép chuỗi dữ liệu người dùng trực tiếp vào câu SQL, vì sẽ mở đường cho tấn công SQL injection.

SQL và NoSQL

  • Quan hệ (SQL): dữ liệu có cấu trúc rõ, quan hệ chặt, đảm bảo giao dịch. Hợp với phần lớn ứng dụng nghiệp vụ.
  • NoSQL (như MongoDB, Redis): lưu dạng tài liệu, khóa-giá trị..., linh hoạt về cấu trúc hoặc tối ưu cho tốc độ và quy mô lớn.

Người mới nên bắt đầu với SQL, vì kiến thức này dùng được gần như mọi nơi.

Chỉ mục (index) giúp truy vấn nhanh

Không có chỉ mục, cơ sở dữ liệu có thể phải quét từng hàng để tìm. Chỉ mục hoạt động như mục lục sách: nhảy thẳng đến vị trí cần. Đổi lại nó tốn thêm bộ nhớ và làm thao tác ghi chậm hơn một chút, nên chỉ nên đánh chỉ mục cho các cột thường tìm kiếm.

Các hàm tổng hợp và nhóm dữ liệu

SQL không chỉ lấy từng hàng, nó còn tính toán trên cả tập dữ liệu. Giả sử có bảng don_hang(id, khach, so_tien):

-- Đếm số đơn và tổng tiền
SELECT COUNT(*) AS so_don, SUM(so_tien) AS tong_tien FROM don_hang;

-- Tổng tiền theo từng khách, chỉ lấy khách chi hơn 1 triệu
SELECT khach, SUM(so_tien) AS tong
FROM don_hang
GROUP BY khach
HAVING SUM(so_tien) > 1000000
ORDER BY tong DESC;

Các hàm thường gặp là COUNT, SUM, AVG, MIN, MAX. GROUP BY chia dữ liệu thành nhóm theo cột, HAVING lọc các nhóm (khác WHERE lọc từng hàng trước khi nhóm).

Sai lầm thường gặp

  1. Dùng SELECT * trong ứng dụng thật: lấy thừa cột, chậm và dễ vỡ khi bảng thay đổi.
  2. Lưu nhiều giá trị vào một ô (ví dụ "toán, lý, hóa"); nên tách thành bảng riêng nối bằng khóa ngoại.
  3. Không đặt ràng buộc (NOT NULL, UNIQUE) nên dữ liệu rác lọt vào.
  4. Không sao lưu cơ sở dữ liệu. Hãy tập thói quen sao lưu định kỳ ngay cả với dự án nhỏ.

Kết luận

Cơ sở dữ liệu giúp ứng dụng nhớ dữ liệu bền vững, còn SQL là ngôn ngữ để quản lý nó. Hãy cài SQLite hoặc MySQL, tự tạo vài bảng như học viên, khóa học, đăng ký và luyện SELECT, JOIN. Chỉ cần vài buổi thực hành, bạn đã đủ nền để học backend.

Khi đã sẵn sàng đi sâu hơn, bạn có thể tham khảo lộ trình học trong các khóa học tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment