一、循环结构
1、循环结构
程序在满足一定条件的基础上,重复执行一段代码。
循环结构只能放在 begin end 中!
2、分类
while、loop、repeat
3、循环控制
iterate:类似于 continue,继续,结束本次循环,继续下一次。
leave:类似于 break;跳出,结束当前所在的循环。
4、三种循环的对比
(1)这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称;
(2)loop 一般用于实现简单的死循环;
while 先判断后执行;
repeat 先执行后判断,无条件至少执行一次;
二、while 循环
1、语法格式
1 2 3 | 【标签:】 while 循环条件 do 循环体; end while 【标签】; |
三、loop 循环
1、语法结构
1 2 3 | 【标签:】loop 循环体; end loop 【标签】; |
可以用来模拟简单的死循环。
四、repeat 循环
1、语法结构
1 2 3 4 | 【标签:】repeat 循环体; until 结束循环的条件 end repeat 【标签】; |
五、案例
1、批量插入,根据次数插入到 admin 表中多条记录
没有添加循环控制语句:
1 DROP PROCEDURE pro_while1$
2 CREATE PROCEDURE pro_while1(IN insertCount INT)
3 BEGIN
4 DECLARE i INT DEFAULT 1;
5 WHILE i<=insertCount DO
6 INSERT INTO admin(username,`password`) VALUES(CONCAT('Rose',i),'666');
7 SET i=i+1;
8 END WHILE;
9
10 END $
11
12 CALL pro_while1(100)$
2、批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
使用标签和leave语句:
1 TRUNCATE TABLE admin$
2 DROP PROCEDURE test_while1$
3 CREATE PROCEDURE test_while1(IN insertCount INT)
4 BEGIN
5 DECLARE i INT DEFAULT 1;
6 a:WHILE i<=insertCount DO
7 INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
8 IF i>=20 THEN LEAVE a;
9 END IF;
10 SET i=i+1;
11 END WHILE a;
12 END $
13
14
15 CALL test_while1(100)$
3、批量插入,根据次数插入到admin表中多条记录,只插入偶数次
使用 iterate 语句和标签
1 TRUNCATE TABLE admin$
2 DROP PROCEDURE test_while1$
3 CREATE PROCEDURE test_while1(IN insertCount INT)
4 BEGIN
5 DECLARE i INT DEFAULT 0;
6 a:WHILE i<=insertCount DO
7 SET i=i+1;
8 IF MOD(i,2)!=0 THEN ITERATE a;
9 END IF;
10
11 INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
12
13 END WHILE a;
14 END $
15
16
17 CALL test_while1(100)$
4、流程控制综合案例
已知表stringcontent,其中字段:id 自增长,content varchar(20)。向该表插入指定个数的,随机的字符串:
(1)创建表:
1 DROP TABLE IF EXISTS stringcontent;
2
3 CREATE TABLE stringcontent(
4 id INT PRIMARY KEY AUTO_INCREMENT,
5 content VARCHAR(20)
6
7 );
(2)创建存储结构
1 DELIMITER $
2 CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
3 BEGIN
4 DECLARE i INT DEFAULT 1;
5 DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
6 DECLARE startIndex INT;#代表初始索引
7 DECLARE len INT;#代表截取的字符长度
8 WHILE i<=insertcount DO
9 SET startIndex=FLOOR(RAND()*26+1);#代表初始索引,随机范围1-26
10 SET len=FLOOR(RAND()*(20-startIndex+1)+1);#代表截取长度,随机范围1-(20-startIndex+1)
11 INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
12 SET i=i+1;
13 END WHILE;
14
15 END $
16
17 CALL test_randstr_insert(10)$
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?