首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 表間數據複製遷移:INSERT SELECT 與 CREATE TABLE AS 實戰語法

     編輯:MySQL 資料庫相關知識

核心場景

將表 A 數據導入表 B,分「目標表已存在」與「目標表不存在」兩種情況,另有指定列複製、條件更新等進階用法。

基礎語法

1. 目標表 B 已存在

INSERT INTO b SELECT * FROM a;

要求:兩表結構完全一致(列數、順序、類型)。

2. 目標表 B 不存在:一鍵建表並導數據

CREATE TABLE b AS SELECT * FROM a;

MySQL 會根據查詢結果自動推導列定義並創建表 B,數據同步寫入。

進階用法

指定列複製

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

列名顯式聲明,順序對應,避免結構不一致報錯。

條件更新:將 B 表匹配行同步到 A 表

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
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved