mysql 循环的写法

mysql8 官方文档中明确说明不支持for 循环

MySQL does not support FOR loops.

mysql的循环写法有以下3种

下面的三种存储过程的循环写法都能实现向test表中插入(p1,10)之间的数据。p1作为存储过程的传入参数存在。 

create table test (id int);

1. loop 语句

语法:

[begin_label:] LOOP

statement_list

END LOOP [end_label]

离开循环体,使用leave 或者return,使用return会直接退出存储过程。

delimiter //
CREATE PROCEDURE p_test(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
insert into test values(p1);
ITERATE label1;   --重复执行标签为label1的循环体

END IF;

LEAVE label1;
END LOOP label1;
END;
//
delimiter ;

call doiterate(2);

mysql> select * from test;
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+------+

上面程序的等价写法。

delimiter //
CREATE PROCEDURE p_test(p1 INT)
BEGIN
label1: LOOP

SET p1 = p1 + 1;

IF p1 >=10 THEN
LEAVE label1;
END IF;
insert into test values(p1);

ITERATE label1;  

END LOOP label1;

END;
//
delimiter ;

loop语句中需要iterate  与 leave 语句的配合使用。

2.while 语句

语法:

[begin_label:] WHILE search_condition DO

statement_list

END WHILE [end_label]

 

 delimiter //

CREATE PROCEDURE p_test(p1 INT)
BEGIN
set p1=p1+1;
while p1<10 do
insert into test values(p1);
SET p1 = p1 + 1;
end while;

END;
//
delimiter ;

3. repeat 语句

 语法:

[begin_label:] REPEAT

statement_list

UNTIL search_condition END REPEAT [end_label]

delimiter //
CREATE PROCEDURE p_test(p1 INT)
BEGIN
set p1=p1+1;
repeat
insert into test values(p1);
SET p1 = p1 + 1;
until p1>=10 end repeat;

END;
//
delimiter ;

posted on 2022-04-17 22:18  JennyYu  阅读(6451)  评论(0编辑  收藏  举报