首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL CREATE TABLE ... LIKE vs AS SELECT 差異深度解析

     編輯:MySQL 資料庫相關知識

快速建立同結構表時,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;欄位定義不複製索引**複製所有資料**

適用場景

  • LIKE:建立測試表、分區表、備份結構、需保留完整約束的新表。
  • AS SELECT (WHERE 1=2):僅需欄位定義、不需索引的臨時表、ETL 階段表。
  • AS SELECT (無條件):快速複製資料建立快照、異構遷移(再手動加索引)。

跨資料庫差異

  • Oracle 支援 AS SELECT(同無索引),**不支援 LIKE**。
  • MySQL 兩者皆支援,語義明確區分。

最佳實踐建議

  1. 生產環境建表 **優先用 LIKE** 確保約束完整。
  2. 若需複製資料:**CREATE TABLE t2 LIKE t1; INSERT INTO t2 SELECT * FROM t1;** 兩步走,效能與正確性兼顧。
  3. 避免直接 AS SELECT * FROM big_table 導致長鎖定與 Binlog 膨脹。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved