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

MySQL: INSERT INTO จากตารางหนึ่งไปอีกตาราง พร้อมตั้งค่าคอลัมน์คงที่

การคัดลอกข้อมูลระหว่างตารางพร้อมกำหนดค่าคงที่ด้วย INSERT ... SELECT

คำสั่ง INSERT INTO ... SELECT ช่วยคัดลอกข้อมูลจากตารางต้นทางไปตารางปลายทางได้ใน Query เดียว พร้อมสามารถกำหนดค่าคงที่ (Literal) ให้คอลัมน์ที่ไม่มีในตารางต้นทาง

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

สร้างตารางต้นทางและเพิ่มข้อมูล:

mysql> CREATE TABLE insertOneToAnotherTable (
    -> Value INT
    -> );
Query OK, 0 rows affected (0.60 sec)

mysql> INSERT INTO insertOneToAnotherTable VALUES(100), (200), (300), (400), (500), (600);
Query OK, 6 rows affected (0.12 sec)

ข้อมูลต้นทาง:

mysql> SELECT * FROM insertOneToAnotherTable;
+-------+
| Value |
+-------+
| 100   |
| 200   |
| 300   |
| 400   |
| 500   |
| 600   |
+-------+
6 rows in set (0.00 sec)

สร้างตารางปลายทาง (มีคอลัมน์เพิ่ม Value2):

mysql> CREATE TABLE receiveDateFromTable (
    -> Value1 INT,
    -> Value2 INT
    -> );
Query OK, 0 rows affected (0.83 sec)

คัดลอก Value ไป Value1 และตั้ง Value2 = 1000 คงที่:

mysql> INSERT INTO receiveDateFromTable(Value1, Value2)
    -> SELECT Value, 1000 FROM insertOneToAnotherTable;
Query OK, 6 rows affected (0.14 sec)
Records: 6 Duplicates: 0 Warnings: 0

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

mysql> SELECT * FROM receiveDateFromTable;
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 100    | 1000   |
| 200    | 1000   |
| 300    | 1000   |
| 400    | 1000   |
| 500    | 1000   |
| 600    | 1000   |
+--------+--------+
6 rows in set (0.00 sec)

คำอธิบายและประยุกต์ใช้

  • SELECT Value, 1000 → คอลัมน์แรกจากตารางต้นทาง, คอลัมน์ที่สองเป็น Literal คงที่
  • สามารถใช้ Expression ได้: SELECT Value, Value * 10, NOW() ...
  • จำนวนและลำดับคอลัมน์ใน INSERT INTO (col1, col2) ต้องตรงกับ SELECT col1, col2
  • ใช้ได้กับ INSERT IGNORE, REPLACE INTO, ON DUPLICATE KEY UPDATE เช่นกัน

กรณีคอลัมน์ AUTO_INCREMENT: หากตารางปลายทางมี PK Auto Increment ให้เว้นคอลัมน์นั้นไว้ใน INSERT (ไม่ระบุในรายการคอลัมน์ และไม่ SELECT มา)