CREATE TABLE ... AS SELECT: คัดลอกโครงสร้าง + ข้อมูลในคำสั่งเดียว
คำสั่งนี้สร้างตารางใหม่โดยอัตโนมัติจาก Result Set ของ SELECT คล้ายกับ CREATE TABLE ... SELECT ในบทความก่อนหน้า แต่เน้นที่การคัดลอกภายใน Database เดียวกัน
สร้างตารางต้นทาง (มี AUTO_INCREMENT เริ่มที่ 101)
mysql> CREATE TABLE DemoTable1518 (
-> EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName VARCHAR(20)
-> ) AUTO_INCREMENT = 101;
Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO DemoTable1518(EmployeeName) VALUES
-> ('John Doe'), ('John Smith'), ('David Miller');
Query OK, 3 rows affected
ข้อมูลต้นทาง
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 101 | John Doe | | 102 | John Smith | | 103 | David Miller | +------------+--------------+
คำสั่งคัดลอก: CREATE TABLE ... AS SELECT
mysql> CREATE TABLE DemoTable1519 AS SELECT * FROM DemoTable1518; Query OK, 3 rows affected (0.62 sec) Records: 3 Duplicates: 0 Warnings: 0
ข้อมูลในตารางใหม่ (เหมือนกันทุกประการ)
mysql> SELECT * FROM DemoTable1519; +------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 101 | John Doe | | 102 | John Smith | | 103 | David Miller | +------------+--------------+
⚠️ ข้อจำกัด (เหมือนบทความก่อนหน้า)
- ไม่คัดลอก Primary Key, Auto Increment, Index, Foreign Key, Constraints, Default Values
- คอลัมน์ EmployeeId ในตารางใหม่จะกลายเป็น
INTธรรมดา (ไม่ใช่ PK, ไม่ Auto Increment) - ตรวจสอบด้วย
SHOW CREATE TABLE DemoTable1519
วิธีคัดลอกสมบูรณ์ (Preserve Structure)
-- 1. สร้างตารางใหม่โครงสร้างเหมือนเดิม (รวม Index, PK, AI) CREATE TABLE DemoTable1519 LIKE DemoTable1518; -- 2. คัดลอกข้อมูล INSERT INTO DemoTable1519 SELECT * FROM DemoTable1518;
กรณีคัดลอกบางคอลัมน์/มีเงื่อนไข
-- คัดลอกเฉพาะคอลัมน์บางตัว CREATE TABLE new_table AS SELECT Id, Name FROM old_table WHERE active = 1; -- คัดลอกพร้อมเปลี่ยนชื่อคอลัมน์ CREATE TABLE new_table AS SELECT Id AS user_id, Name AS full_name FROM old_table;