萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 將查詢結果插入另一張表:INSERT ... SELECT 與 CREATE TABLE ... AS SELECT

目標表已存在

INSERT INTO b SELECT * FROM a;

欄位順序、型別必須相容。指定欄位更安全:

INSERT INTO a (userID, userName) SELECT b.userID, b.userName FROM tr_ajax_chat_messages;

目標表不存在 (一鍵建表+複製)

CREATE TABLE b AS SELECT * FROM a;

會複製欄位定義與資料,**不會複製索引、主鍵、AUTO_INCREMENT、外鍵、觸發器**。

跨表更新 (依主鍵同步欄位)

UPDATE a
SET a.userName = (SELECT b.userName FROM b WHERE a.userID = b.userID);

若 b 有多筆匹配會報錯,建議加 LIMIT 1 或確保唯一。

進階:ON DUPLICATE KEY UPDATE (Upsert)

INSERT INTO a (id, val) SELECT id, val FROM b
ON DUPLICATE KEY UPDATE val = VALUES(val);

效能提示

  • 大量資料分批處理 (每批 1000~5000 行),避免長事務鎖表。
  • 關閉 autocommit 手動控制提交頻率。
  • 必要時 SET SESSION sql_log_bin=0 跳過 Binlog (僅限非複寫環境)。
copyright © 萬盛學電腦網 all rights reserved