ใช้ INSERT INTO ... SELECT ระหว่าง Database โดยระบุ database.table ให้ชัดเจน
Syntax
INSERT INTO destination_db.table_name
SELECT * FROM source_db.table_name;
ตัวอย่างเต็ม
1. สร้างตารางใน Database business (Source)
USE business;
CREATE TABLE OriginalTable (id INT);
INSERT INTO OriginalTable VALUES (1), (2), (3), (4);
2. สร้างตารางใน Database test (Destination)
USE test;
CREATE TABLE OriginalTable (id INT);
3. คัดลอกข้อมูลข้าม Database
INSERT INTO test.OriginalTable
SELECT * FROM business.OriginalTable;
-- Query OK, 4 rows affected
4. ตรวจสอบ
USE test;
SELECT * FROM OriginalTable;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
วิธีอื่นๆ
1. CREATE TABLE ... SELECT (สร้างโครงสร้าง + ข้อมูลพร้อมกัน)
CREATE TABLE test.NewTable AS
SELECT * FROM business.OriginalTable;
⚠️ ไม่คัดลอก Index, Primary Key, Auto Increment, Foreign Key, Triggers
2. mysqldump (สำหรับ Production/Migration)
# Export Structure + Data
mysqldump -u root -p business OriginalTable > table.sql
# Import to another DB
mysql -u root -p test < table.sql
# หรือ Pipe โดยตรง
mysqldump -u root -p business OriginalTable | mysql -u root -p test
3. SELECT INTO OUTFILE / LOAD DATA INFILE (File-based)
-- Export
SELECT * FROM business.OriginalTable
INTO OUTFILE '/tmp/table.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
-- Import
LOAD DATA INFILE '/tmp/table.csv'
INTO TABLE test.OriginalTable
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
ข้อควรระวัง
- โครงสร้างตาราง (Schema) ต้องเหมือนกัน (Column Count, Order, Type)
- Auto Increment: Destination ต้องมีค่าเริ่มต้นที่ไม่ชน
- Foreign Keys: ต้องสร้างใน Destination เอง
- Triggers/Views/Procedures: ไม่ถูกคัดลอก ต้อง Export แยก
- Permissions: User ต้องมี INSERT บน Destination, SELECT บน Source
แนะนำ
- Development/Small Data:
INSERT INTO ... SELECTหรือCREATE TABLE ... SELECT - Production/Migration: mysqldump (Concurrency, Consistency, Metadata)
- Large Data (Millions):
LOAD DATA INFILEหรือpt-archiver(Percona Toolkit)