一、分支结构
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)begincasewhen 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 charbeginif 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)begindeclare i int default 1;while i <= insertCount doinsert 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)begindeclare i int default 1;a:while i <= insertCount doinsert 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 [标签];
