Trong MySQL, bạn có thể tạo một bảng mới bằng cách sao chép cấu trúc và dữ liệu từ một bảng cũ hoặc chỉ lấy các trường cụ thể từ bảng cũ. Điều này thường được sử dụng khi bạn muốn tạo bảng mới dựa trên một phần dữ liệu của bảng hiện có. Dưới đây là cách thực hiện điều đó với các trường hợp khác nhau.
1. Tạo bảng mới từ toàn bộ dữ liệu bảng cũ
Nếu bạn muốn sao chép toàn bộ cấu trúc và dữ liệu từ bảng cũ sang bảng mới, bạn có thể sử dụng cú pháp sau:
CREATE TABLE new_table AS
SELECT * FROM old_table;
new_table
: Tên bảng mới.
old_table
: Tên bảng cũ mà bạn muốn sao chép dữ liệu.
Ví dụ:
CREATE TABLE employees_copy AS
SELECT * FROM employees;
2. Tạo bảng mới từ một số trường cụ thể của bảng cũ
Nếu bạn chỉ muốn sao chép một số trường từ bảng cũ, bạn cần chỉ định các trường đó trong câu lệnh SELECT
:
CREATE TABLE new_table AS
SELECT column1, column2, column3 FROM old_table;
Ví dụ:
CREATE TABLE employees_selected AS
SELECT name, age, department FROM employees;
Trong ví dụ trên, bảng mới employees_selected
chỉ chứa các trường name
, age
, và department
từ bảng cũ employees
.
3. Tạo bảng mới từ dữ liệu có điều kiện
Bạn cũng có thể tạo bảng mới chỉ với những dữ liệu thỏa mãn một điều kiện nhất định từ bảng cũ bằng cách thêm WHERE
vào câu lệnh SELECT
:
CREATE TABLE new_table AS
SELECT column1, column2 FROM old_table
WHERE condition;
Ví dụ:
CREATE TABLE employees_under_30 AS
SELECT name, age FROM employees
WHERE age < 30;
Ở đây, bảng mới employees_under_30
chỉ chứa các nhân viên dưới 30 tuổi từ bảng cũ employees
.
4. Tạo bảng mới với cấu trúc nhưng không có dữ liệu
Nếu bạn chỉ muốn sao chép cấu trúc của bảng cũ (không sao chép dữ liệu), bạn có thể thêm một điều kiện sai (WHERE 1=0
) để không có dữ liệu nào được sao chép:
CREATE TABLE new_table AS
SELECT * FROM old_table WHERE 1=0;
Ví dụ:
CREATE TABLE employees_structure AS
SELECT * FROM employees WHERE 1=0;
Bảng employees_structure
sẽ có cấu trúc giống bảng employees
nhưng không có dữ liệu.
5. Thêm chỉ mục và ràng buộc vào bảng mới
Lưu ý rằng khi sử dụng CREATE TABLE ... AS SELECT ...
, MySQL sẽ không sao chép các chỉ mục (index), khóa chính (primary key), hay ràng buộc (constraints) từ bảng cũ sang bảng mới. Nếu bạn cần các chỉ mục hoặc ràng buộc, bạn phải thêm chúng thủ công sau khi tạo bảng:
Ví dụ thêm chỉ mục:
ALTER TABLE new_table ADD PRIMARY KEY (column_name);
Hoặc thêm chỉ mục:
ALTER TABLE new_table ADD INDEX (column_name);
Kết luận
Cú pháp CREATE TABLE ... AS SELECT ...
trong MySQL cho phép bạn tạo một bảng mới từ dữ liệu của bảng cũ với nhiều tùy chọn khác nhau, bao gồm sao chép toàn bộ dữ liệu, chỉ sao chép một số trường cụ thể, hoặc sao chép có điều kiện. Tuy nhiên, các chỉ mục và ràng buộc sẽ không được sao chép tự động, và bạn cần thêm chúng thủ công sau khi tạo bảng mới.