一、分支结构
1.1 if 函数
使用 if 函数可以实现分支结构,关于 if 函数,自行查阅语法。
1.2 case 结构
类似于 java 中的 switch 结构,用于等值判断,也可类似于 java 中的多重 if 语句,用于实现区间判断。
例如:使用存储过程实现,根据传入的分数,来返回分数所属的等级,90-100,返回 A,80-89,返回 B,60-79 返回 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(59);
1.3 if 结构
mysql 提供了 if 结构来实现多重判断。
例如:使用函数实现,根据传入的分数,来返回分数所属的等级,90-100,返回 A,80-89,返回 B,60-79 返回 C,否则返回D
delimiter $
create function test_if(score int) returns char
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 $
delimiter ;
select test_if('59');
二、循环结构
mysql 提供了三种循环结构:while
,loop
,repeat
mysql 也提供了类似于 java 中的 break 和 continue 的关键字:
iterate
类似于 continue,结束本次循环,继续下一次leave
类似于 break,结束其所在的循环
2.1 while
语法:
[标签:] while 循环条件 do
循环体;
end while [标签];
示例:批量插入,在 admin 表中,根据次数插入多条记录
-- drop procedure test_while;
delimiter $
create procedure test_while(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 test_while(5);
示例:批量插入,在 admin 表中,根据次数插入多条记录,插入的记录数达到 3 条就结束循环
delimiter $
create procedure test_while2(in insertCount int)
begin
declare i int default 1;
a:while i <= insertCount do
insert into admin (username, password) values (concat('rose', i), '666');
set i=i+1;
if i > 3 then leave a;
end if;
end while a;
end $
delimiter ;
call test_while2(5);
2.2 loop
loop 是一种相对比较底层的循环结构,没有循环条件,若要结束 loop 循环,则需要用到 leave,否则 loop 结构就是死循环。
语法:
[标签:] loop
循环体;
end loop [标签];
2.3 repeat
语法:
[标签:] repeat
循环体;
until 结束循环的条件
end repeat [标签];