MySQL 複製表是開發、測試、遷移、備份的高頻操作。本文系統梳理四大複製模式:結構+資料、僅結構、同結構資料導入、異結構欄位映射,對比 SELECT、LIKE、INSERT ... SELECT 的版本差異與適用場景。
CREATE TABLE new_table
SELECT * FROM old_table;
CREATE TABLE new_table
SELECT * FROM old_table WHERE 1=2;
CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table
SELECT * FROM old_table;
new_table 結構與 old_table 完全一致(欄位數、順序、型別)。WHERE 條件增量同步。INSERT INTO new_table (col_a, col_b, col_c)
SELECT src_x, src_y, src_z
FROM old_table
WHERE condition;
SELECT UPPER(name), DATE(created_at), 1 AS status。| 操作 | MySQL 4.0 | MySQL 4.1+ | MySQL 5.0+ | 避坑提醒 |
|---|---|---|---|---|
CREATE ... SELECT | ✅ | ✅ | ✅ | 不複製索引/主鍵/引擎 |
CREATE ... LIKE | ❌ | ✅ | ✅ | 完整複製結構屬性 |
INSERT ... SELECT | ✅ | ✅ | ✅ | 欄位順序型別必須匹配 |
IGNORE 關鍵字 | ✅ | ✅ | 5.7 移除 | 8.0 不支援,改用 ON DUPLICATE KEY UPDATE |
-- 跨庫同實例
CREATE TABLE db2.new_table LIKE db1.old_table;
INSERT INTO db2.new_table SELECT * FROM db1.old_table;
-- 跨伺服器(需 FEDERATED 引擎或 mysqldump 管道)
mysqldump -h src_host -u user -p db1 old_table | mysql -h dst_host -u user -p db2
CREATE TABLE test_tbl LIKE prod_tbl; INSERT INTO test_tbl SELECT * FROM prod_tbl LIMIT 10000; 快速構建小樣本。CREATE TABLE new_tbl LIKE old_tbl; ALTER TABLE new_tbl ENGINE=InnoDB; INSERT ... SELECT 確保引擎一致。INSERT INTO new_tbl SELECT * FROM old_tbl WHERE id BETWEEN 1 AND 100000; 迴圈執行,避免長事務。SELECT COUNT(*), SUM(id) FROM old_tbl UNION ALL SELECT COUNT(*), SUM(id) FROM new_tbl; 快速校驗。