การคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่ง (แม้จะอยู่ในฐานข้อมูลต่างกัน) สามารถทำได้ด้วยคำสั่ง 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 ด้วย