兩大核心語法
| 語法 | 範例 | 複製內容 | 適用場景 |
CREATE TABLE new LIKE old | CREATE TABLE t_new LIKE t_old; | 結構(含索引、外鍵、AUTO_INCREMENT、引擎、字符集) | 克隆表結構、建立分區表、測試環境同步 Schema |
CREATE TABLE new SELECT ... | CREATE TABLE t_new SELECT * FROM t_old WHERE 1=0; | 結構(僅欄位定義,無索引/外鍵/AI/引擎預設為 MyISAM)+ 可選資料 | 建立子集、導出匯入、跨庫複製結構 |
實測差異對比
原表定義
CREATE TABLE t_old (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
content VARCHAR(8000) NOT NULL,
`desc` VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
LIKE 克隆結果(完美複製)
CREATE TABLE t_like LIKE t_old;
SHOW CREATE TABLE t_like\G
-- 結果:InnoDB、AUTO_INCREMENT、PRIMARY KEY、utf8mb4 全保留
SELECT 1=0 結果(缺失關鍵屬性)
CREATE TABLE t_select SELECT * FROM t_old WHERE 1=0;
SHOW CREATE TABLE t_select\G
-- 結果:
-- ENGINE=MyISAM (預設)
-- id BIGINT UNSIGNED NOT NULL DEFAULT '0' (失去 AUTO_INCREMENT)
-- 無 PRIMARY KEY、無索引
修正版 SELECT 保留引擎
CREATE TABLE t_select ENGINE=InnoDB SELECT * FROM t_old WHERE 1=0;
-- 引擎修正,但仍缺:AUTO_INCREMENT、PRIMARY KEY、索引
進階快速建表模式
模式 1:完整克隆(結構+索引+引擎+字符集)
CREATE TABLE t_new LIKE t_old;
模式 2:克隆結構並複製指定資料
CREATE TABLE t_new LIKE t_old;
INSERT INTO t_new SELECT * FROM t_old WHERE status = 1;
模式 3:僅複製部分欄位(重命名)
CREATE TABLE t_new AS
SELECT id, username AS uname, email AS mail
FROM t_old WHERE 1=0; -- 僅結構,無索引
模式 4:跨庫複製結構
CREATE TABLE newdb.t_new LIKE olddb.t_old;
模式 5:指定欄位屬性建表(完全控制)
CREATE TABLE t_new (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
SELECT * FROM t_old WHERE 1=0;
-- 結果:id 保留 AI+PK,其他欄位來自 SELECT,引擎字符集指定
決策流程圖
需要索引/外鍵/AI/引擎一致?
├─ 是 → CREATE TABLE new LIKE old
└─ 否 → 需要複製資料?
├─ 是 → CREATE TABLE new SELECT ... FROM old [WHERE ...]
└─ 否 → 僅需部分欄位結構?
├─ 是 → CREATE TABLE new AS SELECT col1, col2 FROM old WHERE 1=0
└─ 否 → 手寫 CREATE TABLE 完全控制
延伸閱讀
- MySQL 大表備份的簡單方法
- MySQL 中文建表問題解析
- MySQL 添加字段和修改字段的方法