คัดลอกโครงสร้างและข้อมูลตารางข้าม Database ด้วย CREATE TABLE ... SELECT
วิธีเร็วและง่าย ไม่ต้องใช้ mysqldump เหมาะสำหรับคัดลอกตารางเดี่ยวหรือไม่กี่ตาราง
ไวยากรณ์
CREATE TABLE target_db.target_table SELECT * FROM source_db.source_table;
ตัวอย่าง: คัดลอกจาก database 'sample' ไป 'web'
mysql> USE sample;
Database changed
mysql> CREATE TABLE DemoTable101 (
-> Id INT,
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (1.45 sec)
mysql> INSERT INTO DemoTable101 VALUES (101, 'Sam'), (102, 'Bob'), (103, 'David');
Query OK, 3 rows affected
คัดลอกตารางไป Database อื่น
mysql> CREATE TABLE web.DemoTable2 SELECT * FROM sample.DemoTable101; Query OK, 3 rows affected (0.71 sec) Records: 3 Duplicates: 0 Warnings: 0
ตรวจสอบข้อมูลในตารางใหม่
mysql> SELECT * FROM web.DemoTable2; +------+-------+ | Id | Name | +------+-------+ | 101 | Sam | | 102 | Bob | | 103 | David | +------+-------+
⚠️ ข้อจำกัดสำคัญ
- ไม่คัดลอก Index, Primary Key, Auto Increment, Foreign Key, Constraints, Triggers, Views, Stored Procedures
- คัดลอกได้แค่ โครงสร้างคอลัมน์ (Column Definitions) และข้อมูล (Data) เท่านั้น
- คอลัมน์จะได้ Data Type จาก Result Set ของ SELECT (อาจไม่เหมือนต้นฉบับสมบูรณ์)
วิธีคัดลอกสมบูรณ์ (รวม Index, Constraints)
-- 1. ดูโครงสร้างเต็ม SHOW CREATE TABLE sample.DemoTable101; -- 2. สร้างตารางใหม่ด้วยโครงสร้างเดียวกัน CREATE TABLE web.DemoTable2 LIKE sample.DemoTable101; -- 3. คัดลอกข้อมูล INSERT INTO web.DemoTable2 SELECT * FROM sample.DemoTable101;
คัดลอกหลายตาราง/ทั้ง Database
- ใช้
mysqldump(มาตรฐาน สำหรับ Backup/Migrate) - ใช้
mysqlpump(Parallel, เร็วกว่า) - ใช้ Replication (Real-time sync)
- ใช้ Percona XtraBackup (Physical backup, เร็วมาก)