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: LOOPSET 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 ;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求