Mysql -- 控制流程语句

个人的一些学习总结,各位大牛给指正指正。

控制流程语句

程序执行流程有
顺序、分支、循环

一、分支结构

①if函数

语法:if(条件,值1,值2)
可以使用在select子句中,也可以使用在begin end中

②case结构

语法:类似于java中的switch case
case 变量或表达式
when 值1或表达式 then 语句1;
when 值2或表达式 then 语句2;

else 语句n;
end case;
可以使用在select子句中,也可以使用在begin

#使用case结构例题

#案例2:创建函数,传入java的成绩,如果成绩>90返回A,大于80返回B,大于70返回C,大于60返回D,小于60返回E
delimiter $
create function get_score_level2(score float) returns char
begin
	declare score_level char;
	case
	when score>=90 then set score_level = 'A';
	when score>=90 then set score_level = 'B';
	when score>=90 then set score_level = 'C';
	when score>=90 then set score_level = 'D';
	else set score_level = 'E';
	end case;
	return score_level;
end $

#调用函数
select get_score_level2(92);

③if结构

语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;

else 语句n;
end if;
只能用在begin end 中;

使用if结构例题

#案例1:创建函数,传入java的成绩,如果成绩>90返回A,大于80返回B,大于70返回C,大于60返回D,小于60返回E。
delimiter $
create function get_score_level(score float) returns char
begin
	declare score_level char; 
	if score >= 90 then set score_level ='A';
	elseif score >=80 then set score_level = 'B';
	elseif score >=70 then set score_level = 'C';
	elseif score >= 60 then set score_level = 'D';
	else set score_level = 'E';
	end if;
	return score_level;
end $

#调用函数
select get_score_level(59);

二、循环结构

循环语法有:while、loop、repeat

循环控制

a、 iterate类似于java中的continue,表示结束本次循环,继续执行下一次循环。
b、leave类似于java中的break,退出循环,终止循环。

①while循环

语法 :
while 循环条件 do
循环体;
end while;

#案例:批量数据插入,根据传入的次数插入数据到admin表中
delimiter $
create procedure pro_insert_admin(in insert_count int)
begin
	#声明局部变量,初始值为1
	declare i int default 1;
	while i<=insert_count do
		insert into admmin(username,password) values(concat('rose',i),'666');
		set i=i+1;
		end while;
end $

#调用存储过程
call pro_insert_admin(20);

#给循环一个标签。对多层的循环好控制

#给while定义一个标签 a
delimiter $
CREATE PROCEDURE pro_insert_admin1(IN insert_count INT)
BEGIN 
	DECLARE i INT DEFAULT 1;
	a:WHILE i<=insert_count DO
		INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('lucy',i),'666');
		SET i = i+1;
	END WHILE a;

END $

–iterate的使用 -->必须使用标签

#添加iterate终止本次循环,奇数添加数据,偶数不添加。
delimiter $
create procedure pro_insert_admin2(in insert_count int)
begin
	declare i int default 0;
	a:while i<=insert_count do
		set i = i+1;
		if mod(i,2) = 0 then iterate a; //当i是偶数是结束本次循环
		end if;
		insert into admin(username,password) values(concat('lucy',i),'666');
		end while a;
end $

– leave的使用–>必须使用标签

 #leave终止循环,添加到第五笔数据就不添加了
 delimiter $
 create procedure pro_insert_admin3(in insert_count int)
 begin
 	declare i int default 1;
 	a:while i<=insert_count do
 		insert into admin(username,password) values(concat('lucy',i),'666');
 		if i>5 then leave a;	#如果i大于5,终止循环。
 		end if;
 		set i = i+1;
 	end while a;
end $	

②loop循环

语法:
loop
循环体;
end loop;
如果不在循环体中编写退出语句,则直接死循环

#loop的使用 要结合leave 和 iterate

#奇数添加数据,偶数不添加。
delimiter $
create procedure pro_insert_admin4(in insert_count int)
begin
	declare i int default 0;
	a:loop
		if i>insert_count then leave a;#如果循环次数大于传入参数,则终止循环
		end if;
		set i = i+1;
		if mod(i,2) = 0 then iterate a;#如果i是偶数,则结束本次循环。
		end if;
		insert into admin(username,password) values(concat('lucy',i),'666');
		end loop a;
end $

call pro_insert_admin4(20);

③repeat循环

语法:
repeat
循环体;
until 结束循环的条件;
end repeat;

#案例:批量数据插入,根据传入的次数插入数据到admin表中
delimiter $
create procedure pro_insert_admin5(in insert_count int)
begin
	#声明局部变量,初始值为1
	declare i int default 1;
	repeat
		insert into admmin(username,password) values(concat('rose',i),'666');
		set i=i+1;
		until i >insert_count;
	end repeat;
end $

#调用存储过程
call pro_insert_admin(20);
发布了6 篇原创文章 · 获赞 6 · 访问量 1029

猜你喜欢

转载自blog.csdn.net/qq_44866169/article/details/104017545