常見誤區:使用 SELECT * INTO table2 FROM table1(SQL Server 語法)在 MySQL 會報錯「table2 不存在」。本文說明 MySQL 標準寫法:CREATE TABLE ... SELECT。
-- MySQL 不支援
SELECT * INTO table2 FROM table1 WHERE 1=2; -- 僅複製結構
SELECT * INTO table2 FROM table1; -- 複製結構+資料
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; |
ALTER TABLE table2 ADD PRIMARY KEY (id); 等。WHERE 1=2 與 LIMIT 0 效果相同,前者語意更清晰。