Để tạo một bảng mới có cấu trúc (schema) giống hệt bảng hiện có (cột, kiểu dữ liệu, index, khóa chính, v.v.) nhưng **không copy dữ liệu**, bạn dùng cú pháp CREATE TABLE ... LIKE.
Cú pháp
CREATE TABLE ten_bang_moi LIKE ten_bang_cu;
Ví dụ minh họa
1. Tạo bảng gốc
CREATE TABLE ShowCreateTableCommand (
Id INT NOT NULL AUTO_INCREMENT,
FirstName VARCHAR(20),
LastName VARCHAR(20),
Age INT,
TotalMarks INT,
PRIMARY KEY(Id)
);
2. Kiểm tra cấu trúc bảng gốc
DESC ShowCreateTableCommand;
Kết quả:
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| FirstName | varchar(20) | YES | | NULL | |
| LastName | varchar(20) | YES | | NULL | |
| Age | int(11) | YES | | | |
| TotalMarks | int(11) | YES | | | |
+------------+-------------+------+-----+---------+----------------+
3. Xem DDL chi tiết (SHOW CREATE TABLE)
SHOW CREATE TABLE ShowCreateTableCommand\G
Kết quả:
CREATE TABLE `showcreatetablecommand` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` varchar(20) DEFAULT NULL,
`LastName` varchar(20) DEFAULT NULL,
`Age` int(11) DEFAULT NULL,
`TotalMarks` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
4. Tạo bảng mới từ bảng cũ
CREATE TABLE StudentInformationDemo LIKE ShowCreateTableCommand;
5. Kiểm tra cấu trúc bảng mới
SHOW CREATE TABLE StudentInformationDemo\G
Kết quả: Cấu trúc y hệt bảng gốc (kể cả engine, charset, collate, auto_increment).
Đặc điểm của CREATE TABLE ... LIKE
| Đặc điểm | Giải thích |
|---|---|
| Cấu trúc cột | Copy y hệt (tên, kiểu, NULL/DEFAULT) |
| Index/Key | Copy PRIMARY KEY, UNIQUE, INDEX, FOREIGN KEY |
| Engine/Charset | Copy ENGINE, CHARSET, COLLATE |
| AUTO_INCREMENT | Copy giá trị counter hiện tại |
| Dữ liệu | KHÔNG copy - bảng mới rỗng |
| Trigger/Partition | KHÔNG copy |
| View | Không áp dụng cho VIEW |
Các cách tạo bảng từ bảng khác
| Cú pháp | Copy cấu trúc | Copy dữ liệu | Ghi chú |
|---|---|---|---|
CREATE TABLE new LIKE old | ✅ | ❌ | Chỉ schema |
CREATE TABLE new AS SELECT * FROM old | ✅ (kể cả PK? Không) | ✅ | Mất PK, AI, Index |
CREATE TABLE new AS SELECT * FROM old WHERE 1=0 | ✅ (gần giống) | ❌ | Mất PK, AI, Index |
Best Practice: Copy cả cấu trúc và dữ liệu
-- Bước 1: Tạo bảng mới với cấu trúc y hệt
CREATE TABLE new_table LIKE old_table;
-- Bước 2: Copy dữ liệu
INSERT INTO new_table SELECT * FROM old_table;
Cách này bảo toàn khóa chính, auto_increment, index, foreign key.