知识笔记--流程控制结构

1. 流程控制结构

顺序结构:程序从上往下依次执行
分支结构:程序从两条或多条路径中选择一条去执行
循环结构:程序在满足一定条件的基础上,重复执行一段代码

2. 分支结构

1. if函数

功能:
实现简单的双分支
语法:
if(表达式1,表达式2,表达式3)
执行顺序:
如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值
应用:
任何地方

2.case结构

特点:
1. 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,BEGIN END中或BEGIN END的外面
可以作为独立的语句去使用,只能放在BEGIN END
2. 如果WHEN中的值满足或条件成立,则执行对应的THEN后面的语句,并且结束CASE
如果都不满足,则执行ELSE中的语句或值
3. ELSE可以省略,如果ELSE省略了,并且所有WHEN条件都不满足,则返回NULL
案例
题:根据传入的成绩,来显示等级,来显示等级,比如传入的成绩:90-100,显示A;80-90,显示B;60-80,显示C;否则显示D。
delimiter $
create procedure test_case(IN score int)
BEGIN
CASE
WHEN score >= 90 AND score <= 100 THEN select 'A';
WHEN score >= 80 THEN select 'B';
WHEN score >= 60 THEN select 'C';
ELSE select 'D';
END case;
END $
delimiter $
CALL test_case(60) $

3. if结构

功能:实现多量分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
[else 语句n;]
end if;
应用场合:
应用在begin end
案例
题:根据传入的成绩,来显示等级,来显示等级,比如传入的成绩:90-100,返回A;80-90,返回B;60-80,返回C;否则返回D。
delimiter $
create FUNCTION test_if(score int) returns char(1)
BEGIN
if score >= 90 AND score <= 100 THEN return 'A';
elseif score >= 80 THEN return 'B';
elseif score >= 60 THEN return 'C';
else RETURN 'D';
end if;
END $
select test_if(80) $

3. 循环结构

分类:
while loop repeat
循环控制:
iterate 类似于continue,结束本次循环,进行下一次循环。
leave 类似于break,跳出,结束当前所在的循环

1. while

语法:
[标签:]while 循环条件 do
循环体;
end while [标签];

2. loop

语法:
[标签:]loop
循环体;
end loop [标签];
可以用来简单的模拟死循环

3. repeat

语法:
[标签:]repeat
循环体;
until 结束循环的条件
end repeat [标签];

案例

1.批量插入,根据次数插入到admin表中多条记录
delimiter $
create procedure pro_while1(IN insertCount INT)
BEGIN
declare i int default 1;
while i <= insertCount do
insert into admin(username, password)
values(concat('rose',i), '666');
set i = i + 1;
END while;
END $
delimiter $
call pro_while1(100) $
2.批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
delimiter $
create procedure pro_while2(IN insertCount INT)
BEGIN
declare i int default 1;
a:while i <= insertCount do
insert into admin(username, password)
values(concat('xiaohua',i), '0000');
IF i >= 20 THEN LEAVE a;
END IF;
set i = i + 1;
END while a;
END $
delimiter $
call pro_while2(33) $
3.添加iterate语句
批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
delimiter $
create procedure pro_while(IN insertCount INT)
BEGIN
declare i int default 0;
a:while i <= insertCount do
set i = i + 1;
if mod(i, 2) != 0 THEN iterate a;
end if;
insert into admin(username, password)
values(concat('xiaohua',i),'0000');
END while a;
END $
delimiter $
call pro_while(20) $

案例

1. 已知表stringcontent
其中字段:
id 自增长
content varchar(20)
向该表插入指定个数的,随机的字符串
create table stringcontent(
id int primary key auto_increment,
content varchar(20)
);
delimiter $
create procedure test_randstr_insert2(IN insertCount INT)
BEGIN
declare i int default 1; # 定义循环变量,表示插入次数
declare str varchar(26) default 'abcdefghijklmnopqrstuvwxyz';
declare startIndex int default 1; # 起始索引
declare len INT DEFAULT 1; # 代表截取的字符的长度
while i <= insertCount DO
set len = FLOOR(RAND()*(20-startIndex+1)+1);
set startIndex = FLOOR(RAND()*20+1);
insert into stringcontent(content)
values(SUBSTR(str,startIndex,len));
set i = i + 1;
END WHILE;
END $
delimiter $
call test_randstr_insert2(20) $
posted @   jsqup  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示