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

MySQL 存儲過程循環語句完全指南:WHILE、REPEAT、LOOP 與流程控制

     編輯:MySQL 資料庫相關知識

循環類型對比

循環類型語法關鍵字判斷時機適用場景
WHILEWHILE ... DO ... END WHILE前置判斷已知條件、可能零次執行
REPEATREPEAT ... UNTIL ... END REPEAT後置判斷至少執行一次
LOOPlabel: LOOP ... END LOOP無內建判斷複雜流程配合 LEAVE/ITERATE

不推薦: GOTO 導致邏輯跳躍難維護。

DELIMITER 重定義原理

MySQL 預設分隔符 ; 會讓客戶端逐條發送語句。存儲過程包含多條語句,需臨時改用其他分隔符(如 $$、//),定義結束後恢復 ;。

DELIMITER $$
CREATE PROCEDURE demo() BEGIN ... END $$
DELIMITER ;

三大循環完整範例

1. WHILE 循環:批量插入 1~10

DELIMITER $$
DROP PROCEDURE IF EXISTS wk;
CREATE PROCEDURE wk()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i < 11 DO
        INSERT INTO user_profile (uid) VALUES (i);
        SET i = i + 1;
    END WHILE;
END $$
DELIMITER ;
CALL wk();

2. REPEAT 循環:插入 2~20

DELIMITER //
DROP PROCEDURE IF EXISTS looppc;
CREATE PROCEDURE looppc()
BEGIN
    DECLARE i INT DEFAULT 1;
    REPEAT
        INSERT INTO user_profile_company (uid) VALUES (i + 1);
        SET i = i + 1;
    UNTIL i >= 20
    END REPEAT;
END //
DELIMITER ;
CALL looppc();

3. LOOP 循環:插入 1~30,跳過 3 的倍數

DELIMITER $$
DROP PROCEDURE IF EXISTS lopp;
CREATE PROCEDURE lopp()
BEGIN
    DECLARE i INT DEFAULT 1;
    lp1: LOOP
        IF i > 30 THEN
            LEAVE lp1;          -- 等同 break,跳出整個循環
        END IF;
        SET i = i + 1;
        IF (i % 3) = 0 THEN
            ITERATE lp1;        -- 等同 continue,跳過本次剩餘邏輯
        END IF;
        INSERT INTO user_profile (uid) VALUES (i);
    END LOOP;
END $$
DELIMITER ;

流程控制關鍵字詳解

  • LEAVE label:立即退出標籤標識的循環/塊(類似 break)
  • ITERATE label:跳過本次迭代剩餘部分,直接進入下一次判斷(類似 continue)
  • 標籤必須唯一,巢狀循環時用於精準控制目標層級

變量作用域與聲明規則

  • 局部變量:DECLARE var TYPE [DEFAULT val]; 必須置於 BEGIN 之後、首條執行語句之前
  • 用戶變量:@var 無需聲明,跨會話可見(實為會話級全局)
  • 系統變量:@@global.var / @@session.var

存儲過程基礎語法速查

CREATE PROCEDURE proc_name ([IN|OUT|INOUT] param_name type)
BEGIN
    -- 宣告區
    DECLARE var1 INT DEFAULT 0;
    -- 執行區
    SELECT COUNT(*) INTO var1 FROM table;
    -- 返回
    SELECT var1;
END

調用:CALL proc_name();(括號不可省略)

官方文檔參考

MySQL 5.0 參考手冊 - LOOP 語句

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