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

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 @ 2022-03-24 17:37  jsqup  阅读(58)  评论(0编辑  收藏  举报