Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tạo bảng từ View trong MySQL (CREATE TABLE ... SELECT)

Giới thiệu

MySQL cho phép tạo bảng mới từ kết quả của một VIEW (hoặc bất kỳ SELECT nào) bằng cú pháp CREATE TABLE new_table AS SELECT * FROM view_name (hoặc CREATE TABLE new_table SELECT ...).

Ví dụ thực hành

1. Tạo bảng gốc DemoTable830

mysql> CREATE TABLE DemoTable830 (Name VARCHAR(100));

2. Chèn dữ liệu

mysql> INSERT INTO DemoTable830 VALUES ('Chris'),('Robert'),('David'),('Mike');

3. Tạo View

mysql> CREATE VIEW table_view AS SELECT * FROM DemoTable830;

4. Tạo bảng mới từ View

mysql> CREATE TABLE DemoTable831 SELECT * FROM table_view;

5. Kết quả: DemoTable831 có y hệt dữ liệu View

+--------+
| Name   |
+--------+
| Chris  |
| Robert |
| David  |
| Mike   |
+--------+

Đặc điểm của CREATE TABLE ... SELECT

  • Tạo bảng mới với cấu trúc (cột, kiểu dữ liệu) suy ra từ SELECT.
  • Sao chép dữ liệu ngay lập tức.
  • Không sao chép: Index, Primary Key, Foreign Key, AUTO_INCREMENT, DEFAULT, COMMENT, Trigger, Partition.
  • Cần thêm lại PK/AUTO_INCREMENT sau nếu cần:
    ALTER TABLE DemoTable831 ADD Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

So sánh với CREATE TABLE LIKE

Câu lệnhSao chép cấu trúcSao chép dữ liệuSao chép Index/PK/FK
CREATE TABLE t2 LIKE t1CóKhôngCó
CREATE TABLE t2 SELECT * FROM t1Từ SELECTCóKhông

Ứng dụng

  • Backup nhanh cấu trúc + dữ liệu: CREATE TABLE backup_20240101 SELECT * FROM orders;
  • Tạo bảng tạm cho báo cáo phức tạp (materialized view thủ công).
  • Di chuyển dữ liệu giữa database: CREATE TABLE db2.t SELECT * FROM db1.t;
  • Ép kiểu cột: CREATE TABLE t2 SELECT CAST(col AS UNSIGNED) AS col FROM t1;

Lưu ý

  • Cần quyền CREATE TABLE và SELECT trên view/bảng nguồn.
  • View có thể phức tạp (JOIN, GROUP BY) — bảng mới sẽ chứa kết quả phẳng (flattened).
  • Không tạo Foreign Key tự động → cần ALTER TABLE sau.