MySQL LOOP

摘要:在本教程中,您将学习如何使用 MySQL LOOP语句根据条件重复运行代码块。

MySQL LOOP语句简介

LOOP语句允许您重复执行一个或多个语句。

以下是LOOP语句的基本语法:

[begin_label:] LOOP
    statement_list
END LOOP [end_label]
Code language: SQL (Structured Query Language) (sql)

LOOP可以在块的开头和结尾处具有可选标签。

LOOP重复执行statement_liststatement_list可以包含一个或多个语句,每个语句均以分号 (;) 语句分隔符终止。

通常,当条件满足时,可以使用LEAVE语句终止循环。

这是与LEAVE语句一起使用的LOOP语句的典型语法:

[label]: LOOP
    ...
    -- terminate the loop
    IF condition THEN
        LEAVE [label];
    END IF;
    ...
END LOOP;
Code language: SQL (Structured Query Language) (sql)

LEAVE语句立即退出循环。它的工作方式类似于 PHP、C/C++ 和 Java 等其他编程语言中的break语句。

除了LEAVE语句之外,您还可以使用ITERATE语句来跳过当前循环迭代并开始新的迭代。 ITERATE类似于 PHP、C/C++ 和 Java 中的continue语句。

MySQL LOOP语句示例

以下语句创建一个使用LOOP循环语句的存储过程

DROP PROCEDURE LoopDemo;

DELIMITER $$
CREATE PROCEDURE LoopDemo()
BEGIN
	DECLARE x  INT;
	DECLARE str  VARCHAR(255);
        
	SET x = 1;
	SET str =  '';
        
	loop_label:  LOOP
		IF  x > 10 THEN 
			LEAVE  loop_label;
		END  IF;
            
		SET  x = x + 1;
		IF  (x mod 2) THEN
			ITERATE  loop_label;
		ELSE
			SET  str = CONCAT(str,x,',');
		END  IF;
	END LOOP;
	SELECT str;
END$$

DELIMITER ;Code language: SQL (Structured Query Language) (sql)

在这个例子中:

  • 该存储过程从偶数(例如 2、4 和 6)构造一个字符串。
  • loop_label   LOOP语句之前,与ITERATELEAVE语句一起使用。
  • 如果x的值大于10 ,则循环由于LEAVE语句而终止。
  • 如果x的值为奇数,则ITERATE会忽略其下方的所有内容并开始新的循环迭代。
  • 如果x的值为偶数,则ELSE语句中的块将从偶数构建结果字符串。

以下语句调用存储过程:

CALL LoopDemo();Code language: SQL (Structured Query Language) (sql)

这是输出:

+-------------+
| str         |
+-------------+
| 2,4,6,8,10, |
+-------------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.02 sec)Code language: JavaScript (javascript)

在本教程中,您学习了如何使用 MySQL LOOP语句根据条件重复执行代码块。

本教程有帮助吗?