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

MySQL 快速建表技巧:CREATE TABLE ... LIKE vs SELECT 對比與最佳實踐

     編輯:MySQL 綜合教學

兩大核心語法

語法範例複製內容適用場景
CREATE TABLE new LIKE oldCREATE 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 添加字段和修改字段的方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved