錯誤嘗試:SELECT INTO
MySQL 不支援 `SELECT * INTO new_tbl FROM old_tbl`(這是 SQL Server/Access 語法),執行會報錯「Table 'new_tbl' doesn't exist」。
正解:CREATE TABLE ... SELECT
-- 僅複製結構(WHERE 1=2 條件永假)
CREATE TABLE new_tbl SELECT * FROM old_tbl WHERE 1=2;
-- 結構+資料完整複製
CREATE TABLE new_tbl SELECT * FROM old_tbl WHERE 1=1;
-- 或簡寫
CREATE TABLE new_tbl SELECT * FROM old_tbl;
進階用法
- 指定欄位:`CREATE TABLE new_tbl SELECT id, name FROM old_tbl;`
- 重新命名欄位:`CREATE TABLE new_tbl SELECT id AS user_id, name AS username FROM old_tbl;`
- 加入運算欄位:`CREATE TABLE summary SELECT category, COUNT(*) AS cnt FROM posts GROUP BY category;`
限制提醒
- 不會複製索引、主鍵、AUTO_INCREMENT、外鍵、觸發器等約束物件。
- 新表引擎預設為預設儲存引擎(通常是 InnoDB)。
- 大表複製會佔用大量臨時空間與時間,建議改用 `mysqldump` + `sed` 修改表名再匯入。
完整複製(含索引/約束)標準流程
mysqldump -u root -p db_name old_tbl | sed 's/old_tbl/new_tbl/g' | mysql -u root -p db_name