場景:操作前備份表結構與數據,避免誤刪。比 mysqldump 或複製文件更輕量。
CREATE TABLE new_table LIKE old_table;
完整複製列定義、索引、引擎、字符集、自增值。
CREATE TABLE new_table SELECT * FROM old_table LIMIT 0;
複製列定義與部分屬性,但不複製索引、主鍵、自增、外鍵,需手動補充。
SHOW CREATE TABLE old_table\G
-- 複製輸出的 SQL,修改表名、AUTO_INCREMENT 值後執行
完全可控,適合跨實例、需調整結構場景。
CREATE TABLE new_table SELECT * FROM old_table;
一次性複製結構+所有數據,但同樣不複製索引/主鍵/自增。
CREATE TABLE new_table SELECT col1, col2 FROM old_table WHERE id=1;
靈活篩選列與行。
CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table SELECT * FROM old_table;
-- 或指定列
INSERT INTO new_table(col1, col2) SELECT col1, col2 FROM old_table;
保留索引/主鍵/自增,適合需保持完整結構場景。
| 需求 | 推薦方法 | 備註 |
|---|---|---|
| 僅結構,保留索引/主鍵/自增 | CREATE TABLE ... LIKE | 最快、最完整 |
| 僅結構,不需索引 | CREATE TABLE ... SELECT LIMIT 0 | 輕量 |
| 結構+數據,保留索引/主鍵 | LIKE + INSERT SELECT | 兩步驟,最完整 |
| 結構+數據,不需索引 | CREATE TABLE ... SELECT * | 單語句,最快 |
| 部分列/行 | CREATE TABLE ... SELECT col ... WHERE | 靈活 |