Chuyển tới nội dung chính

Bài 3: Tạo Bảng & Ràng Buộc

Giai đoạn 1 – Nhập Môn · Mục tiêu: Tạo được bảng với các cột, kiểu dữ liệu và ràng buộc (constraints) phù hợp.


1. Tạo Bảng – CREATE TABLE

Cú pháp

CREATE TABLE ten_bang (
ten_cot1 KIEU_DU_LIEU [RANG_BUOC],
ten_cot2 KIEU_DU_LIEU [RANG_BUOC],
...
);

Ví dụ: Tạo bảng Học Sinh

CREATE TABLE HocSinh (
MaHS INT AUTO_INCREMENT PRIMARY KEY,
HoTen VARCHAR(100) NOT NULL,
NgaySinh DATE,
GioiTinh ENUM('Nam', 'Nữ') DEFAULT 'Nam',
DiaChi VARCHAR(255),
DienThoai VARCHAR(15),
DiemTB DECIMAL(4, 2),
NgayNhapHoc DATE DEFAULT (CURRENT_DATE)
);

2. Các Ràng Buộc (Constraints)

2.1. PRIMARY KEY – Khoá chính

Đảm bảo mỗi dòng có giá trị duy nhấtkhông NULL.

-- Cách 1: Khai báo cùng cột
MaHS INT PRIMARY KEY,

-- Cách 2: Khai báo riêng (hữu ích khi khoá chính gồm nhiều cột)
PRIMARY KEY (MaHS)

-- Khoá chính gồm 2 cột (composite key)
PRIMARY KEY (MaHS, MaMonHoc)

2.2. NOT NULL – Không cho phép trống

HoTen VARCHAR(100) NOT NULL -- Bắt buộc phải có họ tên

2.3. DEFAULT – Giá trị mặc định

GioiTinh ENUM('Nam', 'Nữ') DEFAULT 'Nam',
SoLuong INT DEFAULT 0,
NgayTao DATETIME DEFAULT NOW()

2.4. UNIQUE – Giá trị duy nhất

Email VARCHAR(255) UNIQUE -- Không có 2 người cùng email

:::info PRIMARY KEY vs UNIQUE

Đặc điểmPRIMARY KEYUNIQUE
Giá trị duy nhất
Cho phép NULL(một giá trị NULL)
Số lượng trong bảngChỉ 1 khoá chínhCó thể nhiều cột UNIQUE
:::

2.5. CHECK – Điều kiện kiểm tra

Tuoi INT CHECK (Tuoi >= 0 AND Tuoi <= 150),
DiemTB DECIMAL(4,2) CHECK (DiemTB >= 0 AND DiemTB <= 10),
Gia DECIMAL(12,2) CHECK (Gia > 0)

2.6. AUTO_INCREMENT – Tự động tăng

MaHS INT AUTO_INCREMENT PRIMARY KEY
-- Dòng 1: MaHS = 1
-- Dòng 2: MaHS = 2
-- Dòng 3: MaHS = 3 (tự động)

2.7. FOREIGN KEY – Khoá ngoại

CREATE TABLE DiemThi (
MaDiem INT AUTO_INCREMENT PRIMARY KEY,
MaHS INT NOT NULL,
MonHoc VARCHAR(50) NOT NULL,
Diem DECIMAL(4, 2) CHECK (Diem >= 0 AND Diem <= 10),

-- Khoá ngoại: MaHS tham chiếu đến bảng HocSinh
FOREIGN KEY (MaHS) REFERENCES HocSinh(MaHS)
);

3. Ví dụ tổng hợp: CSDL Quản Lý Cửa Hàng

-- Bước 1: Tạo CSDL
CREATE DATABASE IF NOT EXISTS QuanLyCuaHang;
USE QuanLyCuaHang;

-- Bước 2: Bảng Khách Hàng
CREATE TABLE KhachHang (
MaKH INT AUTO_INCREMENT PRIMARY KEY,
HoTen VARCHAR(100) NOT NULL,
DienThoai VARCHAR(15) UNIQUE,
Email VARCHAR(255) UNIQUE,
DiaChi VARCHAR(255),
NgayDangKy DATE DEFAULT (CURRENT_DATE)
);

-- Bước 3: Bảng Sản Phẩm
CREATE TABLE SanPham (
MaSP INT AUTO_INCREMENT PRIMARY KEY,
TenSP VARCHAR(200) NOT NULL,
DanhMuc VARCHAR(100),
Gia DECIMAL(12, 2) NOT NULL CHECK (Gia > 0),
SoLuongTon INT DEFAULT 0 CHECK (SoLuongTon >= 0),
MoTa TEXT
);

-- Bước 4: Bảng Đơn Hàng
CREATE TABLE DonHang (
MaDH INT AUTO_INCREMENT PRIMARY KEY,
MaKH INT NOT NULL,
NgayDat DATETIME DEFAULT NOW(),
TongTien DECIMAL(15, 2) DEFAULT 0,
TrangThai ENUM('Chờ xác nhận', 'Đang giao', 'Hoàn thành', 'Đã huỷ')
DEFAULT 'Chờ xác nhận',

FOREIGN KEY (MaKH) REFERENCES KhachHang(MaKH)
);

-- Bước 5: Bảng Chi Tiết Đơn Hàng
CREATE TABLE ChiTietDonHang (
MaCT INT AUTO_INCREMENT PRIMARY KEY,
MaDH INT NOT NULL,
MaSP INT NOT NULL,
SoLuong INT NOT NULL CHECK (SoLuong > 0),
DonGia DECIMAL(12, 2) NOT NULL,
ThanhTien DECIMAL(15, 2),

FOREIGN KEY (MaDH) REFERENCES DonHang(MaDH),
FOREIGN KEY (MaSP) REFERENCES SanPham(MaSP)
);

4. Xem cấu trúc bảng – DESCRIBE

DESCRIBE HocSinh;
-- Hoặc viết tắt
DESC HocSinh;

Kết quả:

+-----------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------------------+------+-----+---------+----------------+
| MaHS | int | NO | PRI | NULL | auto_increment |
| HoTen | varchar(100) | NO | | NULL | |
| NgaySinh | date | YES | | NULL | |
| GioiTinh | enum('Nam','Nữ') | YES | | Nam | |
| DiaChi | varchar(255) | YES | | NULL | |
| DienThoai | varchar(15) | YES | | NULL | |
| DiemTB | decimal(4,2) | YES | | NULL | |
+-----------+--------------------------+------+-----+---------+----------------+

5. Sửa cấu trúc bảng – ALTER TABLE

Thêm cột mới

ALTER TABLE HocSinh ADD Email VARCHAR(255);
ALTER TABLE HocSinh ADD SoThuTu INT FIRST; -- Thêm vào đầu
ALTER TABLE HocSinh ADD Lop VARCHAR(10) AFTER HoTen; -- Thêm sau cột HoTen

Sửa kiểu dữ liệu cột

ALTER TABLE HocSinh MODIFY DienThoai VARCHAR(20);

Đổi tên cột

ALTER TABLE HocSinh CHANGE DienThoai SoDienThoai VARCHAR(20);

Xoá cột

ALTER TABLE HocSinh DROP COLUMN Email;

Đổi tên bảng

ALTER TABLE HocSinh RENAME TO SinhVien;
-- Hoặc
RENAME TABLE HocSinh TO SinhVien;

6. Xoá bảng – DROP TABLE & TRUNCATE

-- Xoá bảng hoàn toàn (cấu trúc + dữ liệu)
DROP TABLE IF EXISTS HocSinh;

-- Xoá dữ liệu nhưng giữ cấu trúc bảng
TRUNCATE TABLE HocSinh;
LệnhXoá dữ liệuXoá cấu trúcReset AUTO_INCREMENT
DROP TABLE
TRUNCATE TABLE
DELETE FROM

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

Bài 1: Tạo bảng cơ bản

Tạo CSDL QuanLyThuVien với các bảng sau:

Bảng DocGia (Độc giả):

CộtKiểuRàng buộc
MaDGINTPRIMARY KEY, AUTO_INCREMENT
HoTenVARCHAR(100)NOT NULL
CMNDVARCHAR(12)UNIQUE
DienThoaiVARCHAR(15)
DiaChiVARCHAR(255)
NgayDangKyDATEDEFAULT ngày hiện tại

Bảng Sach (Sách):

CộtKiểuRàng buộc
MaSachINTPRIMARY KEY, AUTO_INCREMENT
TenSachVARCHAR(200)NOT NULL
TacGiaVARCHAR(100)
TheLoaiVARCHAR(50)
NamXBYEAR
SoLuongINTDEFAULT 1, CHECK >= 0

Bài 2: Bảng với khoá ngoại

Tạo bảng MuonSach (Mượn sách) liên kết với bảng DocGia và Sach:

CộtKiểuRàng buộc
MaMuonINTPRIMARY KEY, AUTO_INCREMENT
MaDGINTFOREIGN KEY → DocGia(MaDG)
MaSachINTFOREIGN KEY → Sach(MaSach)
NgayMuonDATEDEFAULT ngày hiện tại
NgayTraDATE
TrangThaiENUM'Đang mượn', 'Đã trả', DEFAULT 'Đang mượn'

Bài 3: Sửa cấu trúc bảng

  1. Thêm cột Email (VARCHAR 255) vào bảng DocGia.
  2. Sửa cột DienThoai thành VARCHAR(20).
  3. Thêm ràng buộc UNIQUE cho cột Email.
  4. Dùng DESCRIBE để kiểm tra kết quả.

Quay lại: Roadmap · Bài tiếp: Bài 4 – Thêm, Sửa, Xoá Dữ Liệu