随笔 - 116  文章 - 5  评论 - 1  阅读 - 14万

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   JennyYu  阅读(6674)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示