在 MySQL 中,若需從資料表讀取資料並修改後重新插入同一張表,或是複製資料到結構相同/不同的新表,INSERT INTO ... SELECT 語法是最高效的解決方案。本文透過實例詳解各種應用場景。
-- 複製所有欄位(結構完全相同)
INSERT INTO new_table SELECT * FROM old_table;
-- 指定欄位複製(結構不同)
INSERT INTO new_table (col1, col2, ...) SELECT col1, col2, ... FROM old_table;
INSERT INTO your_table (ID, ISO3, TEXT)
SELECT ID, 'JPN', TEXT FROM your_table WHERE ID IN (列表);
-- 'JPN' 為常數值,可直接在 SELECT 列表中指定欲修改的欄位值
CREATE TABLE new_table SELECT * FROM old_table;CREATE TABLE new_table SELECT * FROM old_table WHERE 1=2;(條件永不成立)注意:INSERT INTO ... SELECT 若涉及自增主鍵,需避免主鍵衝突;建議在 SELECT 中排除自增欄位或使用 REPLACE INTO / ON DUPLICATE KEY UPDATE 處理衝突。