知识笔记--流程控制结构
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) $
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/16050870.html