CodeGym /Các khóa học /SQL SELF /Cơ bản về tạo bảng: CREATE TABLE

Cơ bản về tạo bảng: CREATE TABLE

SQL SELF
Mức độ, Bài học
Có sẵn

Ở mấy bài đầu, tụi mình đã đặt nền tảng kiến thức về cơ sở dữ liệu quan hệ và PostgreSQL, học cách làm việc với psql và pgAdmin, cũng như biết cách tạo và quản lý database. Giờ là lúc chuyển sang tạo "vật liệu xây dựng" chính của database quan hệ – bảng. Chính bảng là nơi lưu trữ mọi thông tin mà sau này tụi mình có thể lọc, sắp xếp hoặc kết hợp.

Tạo bảng trong PostgreSQL thì dùng lệnh CREATE TABLE. Lệnh này mô tả cấu trúc bảng: tên bảng, các cột và kiểu dữ liệu của từng cột.

Cấu trúc chung của lệnh

Đây là cú pháp cơ bản:

CREATE TABLE bang (
    cot1 kieu_du_lieu constraints,
    cot2 kieu_du_lieu constraints,
    ...
);

Phân tích từng phần:

  • bang – tên bảng (ví dụ, students).
  • cot1 – tên cột (ví dụ, id, name).
  • kieu_du_lieu – kiểu dữ liệu của cột (ví dụ, INTEGER, VARCHAR).
  • constraints – ràng buộc cho dữ liệu (ví dụ, NOT NULL, PRIMARY KEY).

Giờ tụi mình sẽ tạo bảng đầu tiên nha.

Ví dụ tạo bảng

Kịch bản: trong database học tập cần lưu thông tin về sinh viên. Vậy nên tạo bảng students với các trường:

  • id: mã định danh duy nhất của sinh viên (tự động tăng);
  • name: tên sinh viên (chuỗi tối đa 100 ký tự);
  • age: tuổi sinh viên (số nguyên dương).
CREATE TABLE students (
    id SERIAL PRIMARY KEY,  -- mã ID duy nhất của sinh viên
    name VARCHAR(100),      -- tên
    age INTEGER             -- tuổi
);

Ở đây có gì:

  1. id SERIAL PRIMARY KEY: tạo cột id, tự động sinh số duy nhất (1, 2, 3...) cho mỗi dòng. Nó cũng là khóa chính của bảng.
  2. name VARCHAR(100): tạo cột kiểu text, VARCHAR(100) nghĩa là chuỗi tối đa 100 ký tự.
  3. age INTEGER: tạo cột số để lưu tuổi.

Bây giờ, nếu chạy lệnh này trong psql hoặc pgAdmin, bảng students sẽ được tạo ra.

Các kiểu dữ liệu cho cột

Khi tạo bảng, chọn đúng kiểu dữ liệu cho từng cột là rất quan trọng. PostgreSQL có nhiều kiểu, nhưng tụi mình bắt đầu với mấy kiểu phổ biến nhất.

Kiểu dữ liệu Mô tả Ví dụ giá trị
INTEGER Số nguyên. Hợp cho tuổi, số lượng, mã định danh. 1, 42, 100
VARCHAR(n) Chuỗi tối đa n ký tự. Lý tưởng cho text có giới hạn độ dài. 'Alice', 'Bob'
TEXT Chuỗi không giới hạn. Dùng cho text dài (ví dụ, mô tả sản phẩm). 'Very long text...'
DATE Ngày không có thời gian. Dùng để lưu ngày sinh, sự kiện. 2023-10-12
BOOLEAN Kiểu logic: TRUE hoặc FALSE. Dùng cho flag (ví dụ, đã hoàn thành/chưa). TRUE, FALSE

Chọn kiểu dữ liệu phù hợp

  • Nếu lưu số – dùng INTEGER.
  • Chuỗi có giới hạn độ dài – nên chọn VARCHAR(n).
  • Text không giới hạn – dùng TEXT.
  • Ngày và giờ thì lưu bằng DATE hoặc TIMESTAMP.

Ví dụ: tạo bảng courses

Giả sử trong database cũng cần lưu thông tin về các khóa học. Mỗi khóa học có:

  • id: mã định danh duy nhất;
  • name: tên khóa học (chuỗi tối đa 100 ký tự);
  • description: mô tả khóa học (text dài);
  • start_date: ngày bắt đầu khóa học.

SQL code:

CREATE TABLE courses (
    id SERIAL PRIMARY KEY,      -- mã ID duy nhất của khóa học
    name VARCHAR(100),          -- tên khóa học
    description TEXT,           -- mô tả
    start_date DATE             -- ngày bắt đầu
);

Bài tập thực hành

Giờ tới lượt bạn tạo bảng nha! Đây là đề bài:

  1. Tạo bảng teachers với các trường:
    • id: mã định danh duy nhất.
    • name: tên giáo viên (chuỗi tối đa 50 ký tự).
    • subject: môn mà thầy/cô dạy (chuỗi tối đa 50 ký tự).
    • hire_date: ngày nhận việc.

Ví dụ code để làm:

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    subject VARCHAR(50),
    hire_date DATE
);

Sau khi chạy xong, dùng lệnh \d teachers trong psql để kiểm tra bảng đã được tạo chưa nha.

Lỗi thường gặp khi tạo bảng

Khi mới làm quen với bảng, dễ gặp lỗi lắm. Đây là vài tình huống phổ biến:

Lỗi tên bảng hoặc cột. Trong PostgreSQL, tên không phân biệt hoa thường, nhưng nếu bạn dùng dấu ngoặc kép " quanh tên, phải cẩn thận. Ví dụ, CREATE TABLE "MyTable" sẽ tạo bảng "MyTable", còn mytable sẽ không nhận ra là tên bảng đó.

Sai kiểu dữ liệu. Nếu bạn ghi kiểu dữ liệu không tồn tại, lệnh sẽ báo lỗi.

CREATE TABLE example (
    column1 KIYEU_DU_LIEU_LA
);

Lệnh này sẽ không chạy được vì KIYEU_DU_LIEU_LA không tồn tại.

Quên PRIMARY KEY. Nếu bạn quên thêm khóa chính, bảng vẫn tạo được, nhưng sẽ khó xác định từng dòng.

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Tạo bảng cơ bản
Tạo bảng cơ bản
2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Tạo bảng với các kiểu dữ liệu khác nhau
Tạo bảng với các kiểu dữ liệu khác nhau
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION