將表 A 數據導入表 B,分「目標表已存在」與「目標表不存在」兩種情況,另有指定列複製、條件更新等進階用法。
INSERT INTO b SELECT * FROM a;
要求:兩表結構完全一致(列數、順序、類型)。
CREATE TABLE b AS SELECT * FROM a;
MySQL 會根據查詢結果自動推導列定義並創建表 B,數據同步寫入。
INSERT INTO a (userID, userName)
SELECT b.userID, b.userName
FROM tr_ajax_chat_messages;
列名顯式聲明,順序對應,避免結構不一致報錯。
UPDATE a
SET a.userName = (SELECT b.userName FROM b WHERE a.userID = b.userID);
子查詢必須返回單值,否則報錯;大量數據建議改用 JOIN 更新:
UPDATE a
JOIN b ON a.userID = b.userID
SET a.userName = b.userName;
INSERT SELECT 不觸發目標表觸發器(部分版本),需確認業務邏輯CREATE TABLE AS 不複製索引、外鍵、自增屬性,需補建INSERT INTO db2.b SELECT * FROM db1.a