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

MySQL: คัดลอกตารางข้ามฐานข้อมูลด้วย INSERT INTO SELECT

การคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่ง (แม้จะอยู่ในฐานข้อมูลต่างกัน) สามารถทำได้ด้วยคำสั่ง INSERT INTO ... SELECT

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

INSERT INTO target_database.target_table (col1, col2, ...)
SELECT col1, col2, ...
FROM source_database.source_table;
  • จำนวนคอลัมน์และชนิดข้อมูลต้องตรงกัน
  • สามารถระบุคอลัมน์เฉพาะที่ต้องการคัดลอกได้
  • คอลัมน์ AUTO_INCREMENT จะสร้างค่าใหม่อัตโนมัติ

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

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

CREATE DATABASE bothinnodbandmyisam;
USE bothinnodbandmyisam;

CREATE TABLE Student_Information (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(10),
    Age INT
);

INSERT INTO Student_Information (Name, Age) VALUES
('Larry', 30),
('Mike', 26),
('Bob', 26),
('Carol', 24);

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

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
|  1 | Larry |   30 |
|  2 | Mike  |   26 |
|  3 | Bob   |   26 |
|  4 | Carol |   24 |
+----+-------+------+

2. สร้างตารางปลายทางในฐานข้อมูลอื่น

CREATE DATABASE sample;
USE sample;

CREATE TABLE Student_Table_sample (
    StudentId INT NOT NULL AUTO_INCREMENT,
    StudentName VARCHAR(20),
    StudentAge INT,
    PRIMARY KEY (StudentId)
);

3. คัดลอกข้อมูลข้ามฐานข้อมูล

INSERT INTO sample.Student_Table_sample (StudentName, StudentAge)
SELECT Name, Age
FROM bothinnodbandmyisam.Student_Information;

ผลลัพธ์: Query OK, 4 rows affected

4. ตรวจสอบข้อมูลในตารางปลายทาง

SELECT * FROM Student_Table_sample;
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
|         1 | Larry       |         30 |
|         2 | Mike        |         26 |
|         3 | Bob         |         26 |
|         4 | Carol       |         24 |
+-----------+-------------+------------+

คัดลอกโครงสร้างตารางด้วย (CREATE TABLE ... LIKE)

หากต้องการคัดลอกทั้งโครงสร้างและข้อมูล:

CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;

คัดลอกเฉพาะโครงสร้าง (ไม่รวมข้อมูล)

CREATE TABLE new_table LIKE original_table;

วิธีนี้คัดลอก indexes, constraints, defaults, และ engine type ด้วย