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

MySQL 批量倍增測試資料:INSERT SELECT 表遷移語法與主鍵自增處理

     編輯:MySQL 綜合教學

核心語法:自我複製倍增

-- 基本形式:將表資料再插入自己
INSERT INTO `table_name` (`col1`, `col2`, ...)
SELECT `col1`, `col2`, ... FROM `table_name`;

主鍵自增欄位處理

  • 主鍵為 AUTO_INCREMENT:不可 在 INSERT 清單與 SELECT 清單中包含主鍵欄位,讓資料庫自動產生新 ID。
  • 主鍵非自增/手動指定:需自行計算新 ID (如 MAX(id)+ROW_NUMBER())。

實戰範例

-- 建立測試表
CREATE TABLE `t_user` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(32) NOT NULL,
  `email` VARCHAR(128) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

-- 插入種子資料
INSERT INTO `t_user` (`name`,`email`) VALUES ('Alice','alice@test.com'),('Bob','bob@test.com');

-- 第一次倍增:2 → 4 筆
INSERT INTO `t_user` (`name`,`email`) SELECT `name`,`email` FROM `t_user`;

-- 第二次倍增:4 → 8 筆
INSERT INTO `t_user` (`name`,`email`) SELECT `name`,`email` FROM `t_user`;

-- 第 N 次:指數級增長 2^N

進階:帶條件/轉換的批量產生

-- 複製並修改部份欄位 (如加前綴區分批次)
INSERT INTO `t_user` (`name`,`email`)
SELECT CONCAT('batch2_', `name`), CONCAT('batch2_', `email`) FROM `t_user`;

-- 僅複製符合條件的資料
INSERT INTO `t_user` (`name`,`email`)
SELECT `name`,`email` FROM `t_user` WHERE `id` > 100;

效能與注意事項

項目建議
單次筆數建議 < 50 萬筆,超過請分批 LIMIT
事務控制大批次建議 SET autocommit=0; ... COMMIT; 或工具 pt-archiver
Binlog 膨脹測試環境可暫時 SET sql_log_bin=0; (需 SUPER 權限)
主從延遲大量寫入會導致 Slave 延遲,生產嚴禁直接操作
索引維護批量寫入後執行 ANALYZE TABLE 更新統計資訊

替代方案:專用測試資料生成工具

  • mysqlslap:官方壓力測試工具,可自動生成查詢負載。
  • dbforge / Data Generator:視覺化定義資料規則、關聯、分布。
  • Python Faker + SQLAlchemy:程式化生成高度客製化測試資料。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved