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

MySQL 表複製深度對比:CREATE TABLE LIKE vs CREATE TABLE AS SELECT

     編輯:MySQL 綜合教學

MySQL 表複製深度對比:CREATE TABLE LIKE vs CREATE TABLE AS SELECT

MySQL 提供兩種表複製語法,行為差異巨大。本文從「結構複製完整性」「索引/約束/分區保留」「數據複製」「權限繼承」「性能」「靈活性」六大維度對比,給出場景化選型建議。

語法對比

語法示例複製內容
CREATE TABLE ... LIKECREATE TABLE new_tbl LIKE old_tbl;完整結構:列定義、索引、主鍵、外鍵、分區、自增值、表選項、字符集、校對規則
CREATE TABLE ... AS SELECTCREATE TABLE new_tbl AS SELECT * FROM old_tbl LIMIT 0;僅列定義(數據類型、NULL/NOT NULL、默認值),**不含索引、主鍵、外鍵、分區、自增屬性、觸發器**

六大維度深度對比

維度LIKEAS SELECT
索引/主鍵/唯一鍵✅ 完整複製❌ 全部丟失
外鍵約束✅ 複製(需父表存在)❌ 不複製
分區表✅ 複製分區定義❌ 變為普通表
自增計數器✅ 保留當前值❌ 重置為 1
表選項 (ENGINE/CHARSET/COMMENT)✅ 完整複製❌ 使用默認值
權限 (GRANTS)❌ 都不複製❌ 都不複製
數據複製❌ 無數據✅ 可選列、可加 WHERE、可 LIMIT 0 只取結構
靈活性低(全量複製)高(列投影、過濾、運算、別名、多表 JOIN)
性能(大表結構)較快(元數據操作)需掃描數據(即使 LIMIT 0 也會解析 SELECT)

場景化選型建議

  • 建立分表/歸檔表/備份表結構 → LIKE,保留索引約束,秒級完成。
  • 構建寬表/報表表/數據集市 → AS SELECT,靈活選列、轉換、聚合。
  • 跨庫遷移結構 → LIKE + mysqldump -d 導出 DDL 再導入。
  • 測試環境快速構建 → LIKE 複製結構,再 INSERT ... SELECT 抽樣數據。

補充:權限不複製的解決方案

CREATE TABLE t_like LIKE big_table;        -- 0.03 sec
CREATE TABLE t_as SELECT * FROM big_table LIMIT 0;  -- 0.12 sec (解析 SELECT 開銷)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved