การสร้างตารางใหม่จากคอลัมน์ของตารางเดิมด้วย CREATE TABLE ... AS SELECT
วิธีที่ง่ายและรวดเร็วที่สุดคือใช้คำสั่ง CREATE TABLE ... AS SELECT ซึ่งจะสร้างตารางใหม่พร้อมคัดลอกข้อมูลไปด้วยในคำสั่งเดียว
รูปแบบคำสั่ง
CREATE TABLE new_table_name (new_column_name data_type)
AS SELECT old_column_name AS new_column_name FROM old_table_name;
ตัวอย่าง: คัดลอกคอลัมน์ Score ไปสร้างตารางใหม่
1. สร้างตารางต้นทางและเพิ่มข้อมูล
CREATE TABLE DemoTable1 (
Score INT
);
INSERT INTO DemoTable1 VALUES (89);
INSERT INTO DemoTable1 VALUES (98);
INSERT INTO DemoTable1 VALUES (91);
2. ดูข้อมูลต้นทาง
SELECT * FROM DemoTable1;
ผลลัพธ์:
+-------+
| Score |
+-------+
| 89 |
| 98 |
| 91 |
+-------+
3. สร้างตารางใหม่พร้อมคัดลอกข้อมูล
CREATE TABLE DemoTable2 (
StudentScore INT
) AS SELECT Score AS StudentScore FROM DemoTable1;
ผลลัพธ์การรัน: Query OK, 3 rows affected (0.81 sec) Records: 3 Duplicates: 0 Warnings: 0
4. ตรวจสอบตารางใหม่
SELECT StudentScore FROM DemoTable2;
ผลลัพธ์:
+--------------+
| StudentScore |
+--------------+
| 89 |
| 98 |
| 91 |
+--------------+
คุณสมบัติที่สำคัญ
- สร้างโครงสร้างตารางใหม่โดยอัตโนมัติจากผลลัพธ์ SELECT
- คัดลอกข้อมูลไปพร้อมกันในคำสั่งเดียว (Atomic operation)
- สามารถเปลี่ยนชื่อคอลัมน์ได้ด้วย
AS - สามารถใส่เงื่อนไข WHERE ได้:
AS SELECT ... WHERE Score > 90
ข้อจำกัด
- ไม่คัดลอก
PRIMARY KEY,AUTO_INCREMENT,INDEX,FOREIGN KEY,DEFAULTconstraints - ไม่คัดลอก
TRIGGERหรือVIEW - ชนิดข้อมูลจะถูกอนุมานจากผลลัพธ์ SELECT
วิธีอื่น: INSERT INTO ... SELECT
หากมีตารางปลายทางอยู่แล้ว:
INSERT INTO DemoTable2 (StudentScore) SELECT Score FROM DemoTable1;
วิธีสำรองโครงสร้างเต็มรูปแบบ
CREATE TABLE DemoTable2 LIKE DemoTable1;
INSERT INTO DemoTable2 SELECT * FROM DemoTable1;
วิธีนี้จะคัดลอกโครงสร้าง (Indexes, Keys, Constraints) ทั้งหมดก่อน แล้วค่อยคัดลอกข้อมูล