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

MySQL 與 SQL Server WHILE 迴圈生成測試資料對照:存儲過程 vs 批次腳本

     編輯:MySQL 資料庫相關知識

SQL Server:T-SQL 批次直接執行


DECLARE @a INT = 1;
WHILE @a < 25
BEGIN
    INSERT INTO demotable (id, item1, item2) VALUES (@a, 'abc', '123');
    SET @a = @a + 1;
END;

可直接在 SSMS / sqlcmd 執行,無需建立物件。

MySQL:需包裝在儲存過程中

MySQL 不支援獨立的腳本塊變數宣告與流程控制,**必須在儲存過程/函數/觸發器內**使用 DECLARE、WHILE。


DELIMITER //

CREATE PROCEDURE `insert_demo`()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i < 100 DO
        INSERT INTO demotable (id, item1, item2) VALUES (i, '測試試題', '0');
        SET i = i + 1;
    END WHILE;
END //

DELIMITER ;

-- 呼叫執行
CALL insert_demo();

-- 用完可刪除
DROP PROCEDURE IF EXISTS insert_demo;

關鍵差異總結

特性SQL ServerMySQL
變數宣告DECLARE @var TYPEDECLARE var TYPE(無 @)
流程控制位置批次腳本任意處僅限 Routine 內部
分隔符GO / ;DELIMITER // 避免 ; 衝突
迴圈語法WHILE ... BEGIN ... ENDWHILE ... DO ... END WHILE

MySQL 8.0+ 新選項:CTE 遞迴生成


WITH RECURSIVE nums AS (
    SELECT 1 AS n
    UNION ALL
    SELECT n+1 FROM nums WHERE n < 100
)
INSERT INTO demotable (id, item1, item2)
SELECT n, '測試試題', '0' FROM nums;

無需建立儲存過程,單條 SQL 完成,效能更優。

大量資料生成建議

  • 百萬級以上:用 LOAD DATA INFILE 導入預生成 CSV,比迴圈 INSERT 快 10~100 倍。
  • 測試資料工具:dbForge Data Generator、Mockaroo、Percona tpcc-mysql。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved