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

SQL 表資料複製兩大語法差異:SELECT INTO vs INSERT INTO SELECT 選型指南

     編輯:MySQL 資料庫相關知識

開發測試常需複製表結構與資料,SELECT INTO 與 INSERT INTO SELECT 適用場景截然不同,核心在於目標表是否預先存在。

1. INSERT INTO SELECT —— 目標表已存在

INSERT INTO Table2 (a, c, d)
SELECT a, c, 5 FROM Table1;  -- 可混合插入常數值
  • 目標表 Table2 必須預先建立
  • 可指定欄位順序、插入常數、搭配 WHERE 過濾
  • 適用於資料遷移、增量同步、歸檔

2. SELECT INTO —— 自動建立目標表

SELECT a, c INTO Table2 FROM Table1;
  • 目標表 Table2 必須不存在,語句會自動建立
  • 新表結構來源於 SELECT 列清單與資料型別
  • 不複製索引、約束、觸發器、權限,僅複製資料與基本欄位定義
  • 適用於快速建立測試表、資料快照、臨時分析表

完整範例對比

INSERT INTO SELECT 完整流程

-- 1. 建立目標表
CREATE TABLE Table2 (a VARCHAR(10), c VARCHAR(10), d INT);

-- 2. 複製資料並注入常數 5
INSERT INTO Table2(a, c, d) SELECT a, c, 5 FROM Table1;

SELECT INTO 完整流程

-- 直接建表並複製
SELECT a, c INTO Table2 FROM Table1;
-- Table2 自動建立,結構為 (a VARCHAR(10), c VARCHAR(10))

選型決策樹

  1. 目標表已存在? → INSERT INTO SELECT
  2. 需自動建表且不需索引約束? → SELECT INTO
  3. 需保留索引/約束? → 先 CREATE TABLE ... LIKE src 再 INSERT INTO SELECT
  4. 跨資料庫複製? → 兩者均支援 db.table 完整限定名

注意事項

  • SELECT INTO 在含觸發器的表上可能觸發鎖爭用,大量資料建議分批
  • MySQL 5.6+ 支援 CREATE TABLE ... SELECT ... 語法,功能等同 SELECT INTO 但更標準
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved