首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 自我複製插入:單條 SQL 實現資料翻倍(類蠕蟲複製)

     編輯:MySQL 綜合教學

需快速擴充測試資料量時,可利用 INSERT ... SELECT 將查詢結果直接寫回目標表,實現資料指數級增長,無需應用層迴圈。

核心語法

INSERT INTO target_table (col1, col2, col3)
SELECT col1, col2, col3 FROM target_table;

執行效果示例

-- 初始 2 筆
INSERT INTO user_info (version, create_user_count, create_pc_count)
SELECT version, create_user_count, create_pc_count FROM user_info;
-- 執行後變 4 筆,再執行變 8 筆...指數增長

進階用法

  • 帶 WHERE 條件:SELECT ... FROM user_info WHERE version = 1 只複製特定版本。
  • 欄位轉換:SELECT version+1, create_user_count*2, ... 生成變體資料。
  • 跨表複製:INSERT INTO archive_table SELECT * FROM user_info WHERE create_time < '2023-01-01'。

注意事項

  1. 主鍵衝突:目標表若有自增主鍵,需在 SELECT 列表中排除或指定 NULL 讓自動生成。
  2. 觸發器/外鍵:會觸發 BEFORE/AFTER INSERT 觸發器及外鍵檢查,大量資料時影響性能。
  3. 複制延遲:主從架構下會產生大量 Binlog,導致從庫延遲,建議低峰期執行或分批次。
  4. 事務大小:單條語句隱式事務,行數過大(>10萬)可能鎖表久、Undo Log 膨脹,建議分批 LIMIT 10000 迴圈。

適用場景

  • 開發/測試環境快速製造百萬級測試資料。
  • 歷史資料歸檔、分表初始化填充。
  • 基準測試(sysbench/tpcc)前置資料準備。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved