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

MySQL 動態生成測試數據:存儲過程批量造數實戰

     編輯:MySQL 資料庫相關知識

MySQL 存儲過程動態生成測試數據:從 01-99 到 100-999 批量造數

測試環境常需大量規律性測試數據。本文展示如何通過存儲過程循環生成兩類編碼:兩位數 01-99、三位數 100-999,並驗證結果。

一、建表


CREATE TABLE `test`.`ta` (
    `a` VARCHAR(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

二、創建存儲過程


DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`proc_tp` $$
CREATE PROCEDURE `proc_tp`(IN prex INT, IN max_val INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE s VARCHAR(500);
    WHILE (i < 10 AND prex < max_val) DO
        SET s = CONCAT(prex, i);
        INSERT INTO ta (a) VALUES (s);
        SET i = i + 1;
        IF (i = 10 AND prex < max_val) THEN
            SET prex = prex + 1;
            SET i = 0;
        END IF;
    END WHILE;
END $$

DELIMITER ;

邏輯: 外層 prex 為十位/百位前綴,內層 i 為個位 0-9 循環。prex 從參數起始值遞增至 max_val-1。

三、分批調用生成


-- 生成 A 類:01-99 (prex 0-9,max=10 即 prex<10)
CALL proc_tp(0, 10);

-- 生成 B 類:100-999 (prex 10-99,max=100 即 prex<100)
CALL proc_tp(10, 100);

四、驗證結果


SELECT * FROM ta ORDER BY CAST(a AS UNSIGNED);
-- 輸出:00,01,02...09,10,11...99,100,101...999

五、擴展:更通用的批量造數模板


CREATE PROCEDURE `batch_insert_numbers`(
    IN start_num INT,      -- 起始數字
    IN end_num INT,        -- 結束數字(包含)
    IN target_table VARCHAR(64), -- 目標表
    IN target_col VARCHAR(64)      -- 目標列
)
BEGIN
    DECLARE v_sql TEXT;
    DECLARE i INT DEFAULT start_num;
    SET @sql = CONCAT('INSERT INTO `', target_table, '`(`', target_col, '`) VALUES ');
    WHILE i <= end_num DO
        SET @sql = CONCAT(@sql, '(', QUOTE(i), '),');
        SET i = i + 1;
        IF i % 1000 = 1 OR i > end_num THEN
            SET @sql = CONCAT(LEFT(@sql, CHAR_LENGTH(@sql)-1), ';');
            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
            SET @sql = CONCAT('INSERT INTO `', target_table, '`(`', target_col, '`) VALUES ');
        END IF;
    END WHILE;
END;

優勢: 動態 SQL + 預處理 + 批次提交(每 1000 行),避免單條 INSERT 開銷,支援任意數字範圍、表、列。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved