MySQL 以 CREATE TABLE ... LIKE、CREATE TABLE ... AS SELECT 兩大語法族群,涵蓋四種常見複製需求。
| 需求 | SQL 語句 | 特性 |
|---|---|---|
| 僅複製結構 (含索引/主鍵) | CREATE TABLE new_tbl LIKE old_tbl; | 最快、不複製資料、保留所有約束 |
| 複製結構 + 所有資料 | CREATE TABLE new_tbl AS SELECT * FROM old_tbl; | 不保留主鍵、索引、AUTO_INCREMENT,需手動補齊 |
| 完美複製 (結構+索引+資料) | CREATE TABLE new_tbl LIKE old_tbl; | 標準做法,兩步驟完成 |
| 僅複製指定欄位 | CREATE TABLE new_tbl AS SELECT col1, col2 FROM old_tbl; | 新表僅含指定欄位,型別推導自查詢結果 |
| 條件篩選複製 | CREATE TABLE new_tbl AS SELECT * FROM old_tbl WHERE col = 'val'; | 同指定欄位,僅複製符合條件的列 |
CREATE TABLE new_tbl (
SELECT * FROM old_tbl WHERE 1=0 -- 僅取結構
);
ALTER TABLE new_tbl ADD PRIMARY KEY (id); -- 視情況補齊
LIKE + INSERT ... SELECT,可分批次提交控制事務大小。CREATE TABLE ... AS SELECT 會觸發隱含提交,無法回滾,生產環境謹慎使用。CREATE TABLE db2.new_tbl LIKE db1.old_tbl;