快速建立同結構表時,LIKE 與 AS SELECT 行為差異巨大,選錯會導致索引遺失或資料外洩。
| 語法 | 複製內容 | 索引/約束 | 資料 |
|---|---|---|---|
CREATE TABLE t2 LIKE t1; | 完整表結構 | **保留所有索引、主鍵、外鍵、預設值、AUTO_INCREMENT** | 無 |
CREATE TABLE t2 AS SELECT * FROM t1 WHERE 1=2;或 ... LIMIT 0; | 僅欄位定義 | **不複製索引、主鍵、外鍵、AUTO_INCREMENT** | 無(WHERE 1=2 過濾所有行) |
CREATE TABLE t2 AS SELECT * FROM t1; | 欄位定義 | 不複製索引 | **複製所有資料** |
AS SELECT(同無索引),**不支援 LIKE**。LIKE** 確保約束完整。CREATE TABLE t2 LIKE t1; INSERT INTO t2 SELECT * FROM t1;** 兩步走,效能與正確性兼顧。AS SELECT * FROM big_table 導致長鎖定與 Binlog 膨脹。