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

คัดลอกฐานข้อมูล MySQL ไม่ใช้ mysqldump (CREATE TABLE ... SELECT)

คัดลอกโครงสร้างและข้อมูลตารางข้าม 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, เร็วมาก)