首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

DB2 複製表數據並修改聯合主鍵字段值:兩種高效 SQL 方案

     編輯:程式設計綜合問答

場景描述

表 A 有聯合主鍵 (a, b, c),需複製現有數據並將字段 c 從 0 改為 1,最終表包含原數據與新數據。

方案一:單條 INSERT ... SELECT(最簡潔)

INSERT INTO A (a, b, c)
SELECT a, b, '1'
FROM A;

原理:SELECT 先讀取快照,再插入新行,不會陷入無限循環。DB2 支持此標準語法。

方案二:臨時表中轉(適合複雜轉換)

-- 1. 複製結構
CREATE TABLE A_TMP LIKE A;

-- 2. 複製數據並修改
INSERT INTO A_TMP
SELECT a, b, '1' FROM A;

-- 3. 合併回目標表
INSERT INTO A SELECT * FROM A_TMP;

-- 4. 清理
DROP TABLE A_TMP;

性能對比與選擇建議

指標方案一方案二
SQL 複雜度極低中等
鎖持有時間短(單語句)長(多語句事務)
適用場景單表簡單字段映射跨表、多步轉換、需中間校驗
並發影響極小較大

注意事項

  • 若表有 觸發器,方案一會觸發每行插入觸發器,方案二同樣觸發;需評估業務邏輯副作用。
  • 聯合主鍵列 c 為 CHAR/VARCHAR 時,'1' 需匹配定義長度,建議顯式 CAST('1' AS CHAR(10))。
  • 大數據量(百萬行+)建議分批提交:INSERT ... SELECT ... FETCH FIRST 10000 ROWS ONLY 循環執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved