Bài 2: Tạo & Quản Lý Cơ Sở Dữ Liệu
Giai đoạn 1 – Nhập Môn · Mục tiêu: Biết cách tạo, xoá, chọn cơ sở dữ liệu và hiểu các kiểu dữ liệu cơ bản trong MySQL.
1. Tạo Cơ Sở Dữ Liệu – CREATE DATABASE
Cú pháp
CREATE DATABASE ten_csdl;
Ví dụ
-- Tạo CSDL cho cửa hàng
CREATE DATABASE QuanLyCuaHang;
-- Tạo CSDL chỉ khi chưa tồn tại (tránh lỗi)
CREATE DATABASE IF NOT EXISTS QuanLyCuaHang;
:::warning Quy tắc đặt tên
- Không chứa dấu cách (dùng
_thay thế):quan_ly_cua_hang,quan ly cua hang - Không bắt đầu bằng số:
db_2024,2024_db - Nên dùng chữ thường và gạch dưới:
quanlycuahanghoặcquan_ly_cua_hang:::
2. Xem danh sách CSDL – SHOW DATABASES
SHOW DATABASES;
Kết quả mẫu:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| QuanLyCuaHang |
+--------------------+
:::caution Cơ sở dữ liệu hệ thống
Các CSDL information_schema, mysql, performance_schema là CSDL hệ thống của MySQL. Không được xoá hay sửa đổi chúng!
:::
3. Chọn CSDL để làm việc – USE
Trước khi tạo bảng hay truy vấn, bạn cần chọn CSDL muốn làm việc:
USE QuanLyCuaHang;
Sau lệnh này, tất cả các lệnh tiếp theo sẽ áp dụng lên CSDL QuanLyCuaHang.
4. Xoá Cơ Sở Dữ Liệu – DROP DATABASE
-- Xoá CSDL
DROP DATABASE QuanLyCuaHang;
-- Xoá chỉ khi tồn tại (tránh lỗi)
DROP DATABASE IF EXISTS QuanLyCuaHang;
:::danger Cảnh báo
Lệnh DROP DATABASE sẽ xoá vĩnh viễn toàn bộ CSDL cùng tất cả các bảng và dữ liệu bên trong. Hành động này KHÔNG THỂ HOÀN TÁC!
:::
5. Sửa đổi CSDL – ALTER DATABASE
Thay đổi bộ ký tự (character set) của CSDL:
-- Đặt bộ ký tự UTF-8 (hỗ trợ tiếng Việt)
ALTER DATABASE QuanLyCuaHang
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
:::info Tại sao dùng utf8mb4?
utf8mb4 hỗ trợ đầy đủ ký tự Unicode, bao gồm tiếng Việt có dấu và emoji. Luôn sử dụng utf8mb4 thay vì utf8 trong MySQL.
:::
6. Các kiểu dữ liệu trong MySQL
6.1. Kiểu số (Numeric)
| Kiểu | Phạm vi | Kích thước | Sử dụng cho |
|---|---|---|---|
TINYINT | -128 → 127 | 1 byte | Trạng thái (0/1), tuổi |
SMALLINT | -32,768 → 32,767 | 2 bytes | Năm, số lượng nhỏ |
INT | ±2.1 tỷ | 4 bytes | ID, số lượng, mã |
BIGINT | ±9.2 × 10¹⁸ | 8 bytes | ID lớn (Facebook, Google) |
DECIMAL(M,D) | Tuỳ chỉnh | Tuỳ chỉnh | Tiền tệ, phần trăm |
FLOAT | ±3.4 × 10³⁸ | 4 bytes | Số thập phân (gần đúng) |
DOUBLE | ±1.7 × 10³⁰⁸ | 8 bytes | Tính toán khoa học |
:::tip DECIMAL vs FLOAT
- Dùng
DECIMAL(10,2)cho tiền tệ → chính xác tuyệt đối. - Dùng
FLOAT/DOUBLEcho dữ liệu khoa học → nhanh hơn nhưng có sai số nhỏ.
-- Cột giá sản phẩm: tối đa 99,999,999.99
Gia DECIMAL(10, 2)
:::
6.2. Kiểu chuỗi (String)
| Kiểu | Độ dài | Sử dụng cho |
|---|---|---|
CHAR(n) | Cố định n ký tự | Mã (VD: CHAR(5) cho mã SP) |
VARCHAR(n) | Tối đa n ký tự | Tên, email, địa chỉ |
TEXT | Tối đa 65,535 ký tự | Mô tả, ghi chú dài |
LONGTEXT | Tối đa 4GB | Nội dung bài viết |
ENUM(...) | Giá trị cố định | Giới tính, trạng thái |
-- Ví dụ sử dụng
HoTen VARCHAR(100), -- Họ tên tối đa 100 ký tự
MaSP CHAR(10), -- Mã SP luôn đúng 10 ký tự
MoTa TEXT, -- Mô tả sản phẩm
GioiTinh ENUM('Nam', 'Nữ') -- Chỉ chọn Nam hoặc Nữ
6.3. Kiểu ngày giờ (Date/Time)
| Kiểu | Định dạng | Ví dụ |
|---|---|---|
DATE | YYYY-MM-DD | 2024-12-25 |
TIME | HH:MM:SS | 14:30:00 |
DATETIME | YYYY-MM-DD HH:MM:SS | 2024-12-25 14:30:00 |
TIMESTAMP | Giống DATETIME | Tự động cập nhật khi sửa bản ghi |
YEAR | YYYY | 2024 |
-- Ví dụ sử dụng
NgaySinh DATE, -- 2005-03-15
ThoiGianDatHang DATETIME, -- 2024-12-25 14:30:00
NgayCapNhat TIMESTAMP DEFAULT NOW() -- Tự động ghi thời gian hiện tại
6.4. Kiểu Boolean
MySQL không có kiểu BOOLEAN riêng, thay vào đó dùng TINYINT(1):
DaThanhToan TINYINT(1) DEFAULT 0 -- 0 = Chưa, 1 = Rồi
-- Hoặc
DaThanhToan BOOLEAN DEFAULT FALSE -- MySQL tự chuyển thành TINYINT(1)
7. Bảng tổng hợp: Chọn kiểu dữ liệu phù hợp
| Loại dữ liệu | Kiểu nên dùng | Ví dụ |
|---|---|---|
| Mã/ID tự tăng | INT AUTO_INCREMENT | MaHS, MaSP |
| Họ tên | VARCHAR(100) | Nguyễn Văn An |
VARCHAR(255) | an@gmail.com | |
| Số điện thoại | VARCHAR(15) | 0901234567 |
| Giá tiền | DECIMAL(12, 2) | 1,250,000.00 |
| Ngày sinh | DATE | 2005-03-15 |
| Mô tả | TEXT | Sản phẩm chất lượng cao... |
| Trạng thái | ENUM(...) hoặc TINYINT | 'Đang giao', 'Hoàn thành' |
| Giới tính | ENUM('Nam','Nữ') | Nam, Nữ |
:::info Tại sao Số điện thoại dùng VARCHAR?
Số điện thoại bắt đầu bằng 0 (VD: 0901234567). Nếu dùng INT, số 0 đầu tiên sẽ bị mất. Ngoài ra, số điện thoại có thể chứa + hoặc - (VD: +84-901234567).
:::
Bài tập thực hành
Bài 1: Thao tác cơ bản
-- 1. Tạo CSDL tên QuanLyTruongHoc
-- 2. Xem danh sách tất cả CSDL
-- 3. Chọn CSDL QuanLyTruongHoc để làm việc
-- 4. Đặt bộ ký tự utf8mb4 cho CSDL
Bài 2: Xác định kiểu dữ liệu
Cho các thông tin sau, hãy chọn kiểu dữ liệu phù hợp:
| Thông tin | Kiểu dữ liệu bạn chọn |
|---|---|
| Mã học sinh (tự tăng) | ? |
| Họ và tên | ? |
| Ngày sinh | ? |
| Điểm trung bình (VD: 8.75) | ? |
| Giới tính | ? |
| Địa chỉ nhà | ? |
| Ảnh đại diện (đường dẫn file) | ? |
| Đã tốt nghiệp hay chưa | ? |
Bài 3: Thiết kế CSDL
Hãy liệt kê các cột (tên cột + kiểu dữ liệu) cần thiết cho bảng quản lý Sản phẩm của một cửa hàng điện thoại di động.
Quay lại: Roadmap · Bài tiếp: Bài 3 – Tạo Bảng & Ràng Buộc