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

MySQL 複製表結構與資料:CREATE TABLE ... SELECT 正確姿勢

     編輯:MySQL 綜合教學

前言

常見誤區:使用 SELECT * INTO table2 FROM table1(SQL Server 語法)在 MySQL 會報錯「table2 不存在」。本文說明 MySQL 標準寫法:CREATE TABLE ... SELECT。

錯誤寫法(SQL Server 風格)

-- MySQL 不支援
SELECT * INTO table2 FROM table1 WHERE 1=2;  -- 僅複製結構
SELECT * INTO table2 FROM table1;            -- 複製結構+資料

正確寫法(MySQL 標準)

僅複製結構(無資料)

CREATE TABLE table2 
SELECT * FROM table1 WHERE 1=2;

WHERE 1=2 條件永假,不回傳任何列,僅依選取清單建立結構。

複製結構與資料

CREATE TABLE table2 
SELECT * FROM table1 WHERE 1=1;  -- 或直接省略 WHERE

進階用法

需求寫法
指定引擎/字符集CREATE TABLE table2 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 SELECT ...
重新命名欄位CREATE TABLE table2 SELECT id AS new_id, name FROM table1;
僅複製部分欄位CREATE TABLE table2 SELECT id, name FROM table1;
加入衍生欄位CREATE TABLE table2 SELECT id, name, CONCAT('prefix_', name) AS full_name FROM table1;
複製多表 JOIN 結果CREATE TABLE table2 SELECT a.id, b.name FROM a JOIN b ON a.id=b.id;

注意事項

  • 新表不會自動複製:主鍵、索引、外鍵、AUTO_INCREMENT、預設值、觸發器、權限。
  • 僅複製欄位定義與資料。需補充:ALTER TABLE table2 ADD PRIMARY KEY (id); 等。
  • WHERE 1=2 與 LIMIT 0 效果相同,前者語意更清晰。

相關延伸閱讀

  • MySQL 建表實例
  • MySQL 聯結查詢一覽
  • MySQL 排序使用情況
  • 查看 MySQL 伺服器的進程
  • MySQL key_buffer_size 參數設定
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved