Câu lệnh CREATE TABLE
trong MySQL được sử dụng để tạo bảng mới trong cơ sở dữ liệu. Việc hiểu rõ cú pháp và cách sử dụng câu lệnh này rất quan trọng khi bạn muốn thiết kế cơ sở dữ liệu. Chúng ta sẽ bắt đầu từ ví dụ cơ bản và dần đến các tình huống nâng cao hơn.
CREATE TABLE
table_name
id
: Cột kiểu INT
, là khóa chính (PRIMARY KEY
), và tự động tăng giá trị (AUTO_INCREMENT
).name
: Cột kiểu VARCHAR
với độ dài tối đa 100 ký tự, không cho phép giá trị NULL
.age
: Cột kiểu INT
, lưu trữ độ tuổi của nhân viên.salary
: Cột kiểu DECIMAL
lưu trữ lương của nhân viên với tối đa 10 chữ số, trong đó có 2 chữ số thập phân.PRIMARY KEY
)Khóa chính là một ràng buộc giúp xác định duy nhất mỗi bản ghi trong bảng.
id
Cột department_id
trong bảng employees
là khóa ngoại, liên kết với cột id
của bảng departments
. Điều này đảm bảo rằng mỗi nhân viên thuộc một phòng ban có tồn tại trong bảng departments
.
NOT NULL
Ràng buộc NOT NULL
không cho phép giá trị rỗng trong một cột.
name
Cột email
chỉ có thể chứa các giá trị không trùng lặp.
DEFAULT
Ràng buộc DEFAULT
thiết lập giá trị mặc định cho một cột khi không có giá trị được cung cấp.
INT
salary
: Kiểu DECIMAL(10, 2)
lưu trữ các số có tối đa 10 chữ số, trong đó có 2 chữ số thập phân.hire_date
: Kiểu DATE
lưu trữ ngày.INDEX
)Chỉ mục (INDEX
) giúp tăng tốc độ truy vấn dữ liệu, đặc biệt với các bảng lớn.
name
Bảng này sẽ bị xóa tự động khi phiên làm việc kết thúc hoặc người dùng thoát khỏi cơ sở dữ liệu.
PARTITION
)Phân vùng giúp chia nhỏ dữ liệu trong bảng để quản lý và truy vấn hiệu quả hơn.
salary
Bảng products
chứa khóa ngoại category_id
để liên kết với bảng categories
, tạo mối quan hệ một danh mục nhiều sản phẩm.
AUTO_INCREMENT
bắt đầu từ giá trị tùy chỉnhBạn có thể chỉ định giá trị bắt đầu cho cột AUTO_INCREMENT
.
orders
Ràng buộc CHECK
trong bảng employees
đảm bảo rằng giá trị của age
phải lớn hơn hoặc bằng 18.
IF NOT EXISTS
để tránh lỗi khi bảng đã tồn tạiKhi tạo bảng, bạn có thể sử dụng mệnh đề IF NOT EXISTS
để tránh lỗi nếu bảng đã tồn tại.
employees
Bảng này sẽ được chia thành 4 phân vùng dựa trên giá trị hash của cột department_id
. Khi bạn thêm một bản ghi mới, MySQL sẽ tính toán giá trị hash của department_id
và tự động phân loại vào một trong các phân vùng.
LIST
Phân vùng theo LIST
giúp chia bảng dựa trên danh sách các giá trị cụ thể.
orders
Bảng order_items
liên kết với bảng orders
và products
thông qua các cột order_id
và product_id
. Điều này tạo ra một mối quan hệ nhiều-nhiều giữa các đơn hàng và sản phẩm, cho phép một đơn hàng có nhiều sản phẩm và một sản phẩm xuất hiện trong nhiều đơn hàng.
MySQL hỗ trợ kiểu dữ liệu JSON
, cho phép lưu trữ các đối tượng JSON phức tạp trực tiếp trong cột của bảng.
attributes
Lệnh này lưu trữ dữ liệu về một laptop Dell với các thuộc tính đặc biệt trong định dạng JSON.
ON DELETE CASCADE
Hành vi ON DELETE CASCADE
được sử dụng để tự động xóa tất cả các bản ghi liên quan khi một bản ghi trong bảng cha bị xóa.
customers
Trong bảng này, final_price
được tính tự động bằng công thức price - discount
mà không cần phải lưu trữ trực tiếp trong cơ sở dữ liệu.
INDEX
)Chỉ mục không duy nhất (INDEX
) giúp cải thiện tốc độ truy vấn nhưng không bắt buộc giá trị trong cột đó phải duy nhất.
department_id
Chỉ mục UNIQUE
trên cột email
đảm bảo rằng không có hai nhân viên nào có cùng địa chỉ email.
SPATIAL
)MySQL hỗ trợ các loại dữ liệu không gian như POINT
, LINESTRING
, và POLYGON
để lưu trữ thông tin địa lý.
coordinates
Trong bảng này:
RANGE
theo YEAR(sale_date)
).HASH
theo MONTH(sale_date)
).Điều này giúp quản lý dữ liệu doanh số theo năm và tháng một cách hiệu quả.
MySQL hỗ trợ nhiều loại storage engine, trong đó phổ biến nhất là InnoDB
và MyISAM
. Bạn có thể chỉ định storage engine khi tạo bảng:
blog_posts
Cột gender
chỉ có thể nhận một trong các giá trị: 'Male'
, 'Female'
, hoặc 'Other'
.
SET
: Lưu trữ một hoặc nhiều giá trị từ một danh sách cố định.CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), skills SET('PHP', 'JavaScript', 'Python', 'Java') );
Cột skills
có thể lưu trữ nhiều kỹ năng cho một nhân viên, ví dụ: PHP, JavaScript
.
Những ví dụ trên bao quát nhiều tình huống sử dụng nâng cao cho câu lệnh CREATE TABLE
trong MySQL, giúp tối ưu hóa hiệu suất, quản lý dữ liệu hiệu quả và phù hợp với các yêu cầu cụ thể trong các hệ thống phức tạp.