个人的一些学习总结,各位大牛给指正指正。
控制流程语句
程序执行流程有
顺序、分支、循环
一、分支结构
①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);