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

MySQL Copy ข้อมูลจากตารางหนึ่งไปอีกตารางใน Database เดียวกัน (INSERT SELECT)

ใช้ INSERT INTO ... SELECT ... เพื่อคัดลอกข้อมูลจากตารางต้นทางไปตารางปลายทางใน Database เดียวกันได้ในคำสั่งเดียว

ตัวอย่างการใช้งาน

1. สร้างตารางต้นทาง (DemoTable1)

mysql> CREATE TABLE DemoTable1 (
    Id INT,
    FirstName VARCHAR(20),
    Age INT
);
Query OK, 0 rows affected (0.00 sec)

2. เพิ่มข้อมูลต้นทาง

mysql> INSERT INTO DemoTable1 VALUES(101, 'Chris', 24);
mysql> INSERT INTO DemoTable1 VALUES(102, 'David', 28);

3. แสดงข้อมูลต้นทาง

mysql> SELECT * FROM DemoTable1;
+------+-----------+------+
| Id   | FirstName | Age  |
+------+-----------+------+
|  101 | Chris     |   24 |
|  102 | David     |   28 |
+------+-----------+------+

4. สร้างตารางปลายทาง (DemoTable2) โครงสร้างต่างกันเล็กน้อย

mysql> CREATE TABLE DemoTable2 (
    EmployeeId INT,
    EmployeeName VARCHAR(20),
    EmployeeAge INT
);
Query OK, 0 rows affected (0.00 sec)

5. INSERT SELECT: คัดลอกเฉพาะ Id=102

mysql> INSERT INTO DemoTable2(EmployeeId, EmployeeName, EmployeeAge)
    SELECT Id, FirstName, Age FROM DemoTable1 WHERE Id = 102;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

6. ตรวจสอบตารางปลายทาง

mysql> SELECT * FROM DemoTable2;
+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
|        102 | David        |          28 |
+------------+--------------+-------------+

รูปแบบคำสั่ง

INSERT INTO target_table (col1, col2, col3)
SELECT source_col1, source_col2, source_col3
FROM source_table
WHERE condition;

ข้อดีของ INSERT SELECT

  • ⚡ Atomic: ทำใน 1 Statement ไม่ต้อง Fetch แล้ว Insert ทีละแถวใน Application
  • 🔒 Consistent: ข้อมูลไม่เปลี่ยนระหว่าง Select และ Insert
  • 🚀 Fast: ประมวลผลฝั่ง Server ไม่มี Network Round-trip
  • 🔧 Flexible: ใช้ WHERE, JOIN, Function, Expression ได้หมด

กรณีคอลัมน์ตรงกันทุกคอลัมน์ (ลำดับและจำนวนเท่ากัน)

INSERT INTO target_table SELECT * FROM source_table WHERE ...;

สรุป

INSERT INTO target (cols) SELECT cols FROM source WHERE ... เป็นวิธีมาตรฐานและมีประสิทธิภาพสูงสุดสำหรับการ Copy ข้อมูลระหว่างตารางใน MySQL เดียวกัน