首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL CREATE TABLE ... AS vs LIKE 深度對比:結構、索引、數據誰保留?

     編輯:MySQL 綜合教學

核心差異一覽

特性CREATE TABLE ... AS SELECTCREATE TABLE ... LIKE
表結構✅ 復制✅ 復制
索引/主鍵/外鍵/約束❌ 不復制✅ 完整復制
數據行✅ 可選(帶 WHERE/LIMIT)❌ 不復制
自增計數器❌ 重置為 1✅ 保留原值
分區定義❌ 不復制✅ 復制

語法與典型用法

1. CREATE TABLE ... AS SELECT —— 「結構+數據」快照

-- 完整復制結構與數據
CREATE TABLE t2 AS SELECT * FROM t1;

-- 僅復制結構(利用永假條件)
CREATE TABLE t2 AS SELECT * FROM t1 WHERE 1=2;
-- 或
CREATE TABLE t2 AS SELECT * FROM t1 LIMIT 0;

適用:建測試表、導出子集、ETL 臨時表、跨庫遷移數據(配合 INSERT ... SELECT)。

2. CREATE TABLE ... LIKE —— 「結構+索引+屬性」克隆

CREATE TABLE t2 LIKE t1;

適用:建生產備份表、分區表克隆、保留自增值/外鍵/分區方案的空表初始化。

進階差異點

  • 視圖/觸發器:兩者均不復制視圖定義或觸發器。
  • 權限/統計信息:均不復制 GRANT、直方圖等元數據。
  • 存儲引擎:LIKE 保留原引擎;AS SELECT 默認使用會話 default_storage_engine(可顯式指定 ENGINE=InnoDB)。
  • Oracle 兼容性:Oracle 僅支持 AS SELECT(無索引),無 LIKE 語法。

最佳實踐決策樹

  1. 需要索引/主鍵/外鍵/分區/自增值完整保留? → LIKE
  2. 需要攜帶數據? → AS SELECT(再手動 ALTER TABLE ... ADD INDEX 補索引)
  3. 既要結構+索引又要數據? → LIKE 創建空表 → INSERT ... SELECT 導數據(可控、可分批、可監控)

一條經驗之談

生產環境「建表如建庫」,優先用 LIKE 保證約束完整,再按需導數據。AS SELECT 適合臨時分析、開發自建表,切勿直接用於核心業務表初始化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved