Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คัดลอกข้อมูลทั้งหมดจากตารางหนึ่งไปอีกตารางใน MySQL (CREATE TABLE AS SELECT)

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;