一、分支结构

1.1 if 函数

使用 if 函数可以实现分支结构,关于 if 函数,自行查阅语法。

1.2 case 结构

类似于 java 中的 switch 结构,用于等值判断,也可类似于 java 中的多重 if 语句,用于实现区间判断。

例如:使用存储过程实现,根据传入的分数,来返回分数所属的等级,90-100,返回 A,80-89,返回 B,60-79 返回 C,否则返回D

  1. delimiter $
  2. create procedure test_case(in score int)
  3. begin
  4. case
  5. when score >= 90 and score <= 100 then select 'A';
  6. when score >= 80 then select 'B';
  7. when score >= 60 then select 'C';
  8. else select 'D';
  9. end case;
  10. end $
  11. delimiter ;
  12. call test_case(59);

1.3 if 结构

mysql 提供了 if 结构来实现多重判断。

例如:使用函数实现,根据传入的分数,来返回分数所属的等级,90-100,返回 A,80-89,返回 B,60-79 返回 C,否则返回D

  1. delimiter $
  2. create function test_if(score int) returns char
  3. begin
  4. if score >= 90 and score <= 100 then return 'A';
  5. elseif score >= 80 then return 'B';
  6. elseif score >= 60 then return 'C';
  7. else return 'D';
  8. end if;
  9. end $
  10. delimiter ;
  11. select test_if('59');

二、循环结构

mysql 提供了三种循环结构:whilelooprepeat

mysql 也提供了类似于 java 中的 break 和 continue 的关键字:

  • iterate 类似于 continue,结束本次循环,继续下一次
  • leave 类似于 break,结束其所在的循环

mysql 中循环结构可以命名,但不强制(叫做“标签”)

2.1 while

语法:

  1. [标签:] while 循环条件 do
  2. 循环体;
  3. end while [标签];

示例:批量插入,在 admin 表中,根据次数插入多条记录

  1. -- drop procedure test_while;
  2. delimiter $
  3. create procedure test_while(in insertCount int)
  4. begin
  5. declare i int default 1;
  6. while i <= insertCount do
  7. insert into admin (username, password) values (concat('rose', i), '666');
  8. set i=i+1;
  9. end while;
  10. end $
  11. delimiter ;
  12. call test_while(5);

示例:批量插入,在 admin 表中,根据次数插入多条记录,插入的记录数达到 3 条就结束循环

  1. delimiter $
  2. create procedure test_while2(in insertCount int)
  3. begin
  4. declare i int default 1;
  5. a:while i <= insertCount do
  6. insert into admin (username, password) values (concat('rose', i), '666');
  7. set i=i+1;
  8. if i > 3 then leave a;
  9. end if;
  10. end while a;
  11. end $
  12. delimiter ;
  13. call test_while2(5);

2.2 loop

loop 是一种相对比较底层的循环结构,没有循环条件,若要结束 loop 循环,则需要用到 leave,否则 loop 结构就是死循环。

语法:

  1. [标签:] loop
  2. 循环体;
  3. end loop [标签];

2.3 repeat

语法:

  1. [标签:] repeat
  2. 循环体;
  3. until 结束循环的条件
  4. end repeat [标签];