在存储过程和函数中实现比较复杂的业务时,需要对应的流程控制来控制,类似Java的分支和循环语句
,MySQL也有对应的语句。
语句结构 | 说明 |
---|---|
顺序结构 | 顺序从上往下依次执行 |
分支结构 | 顺序按条件进行选择执行 |
循环结构 | 程序满足一定条件下,重复执行一组语句 |
针对MySQL的流程控制语句主要有3类,用于存储程序。
语句类型 | 说明 |
---|---|
条件判断语句 | IF语句和CASE语句 |
循环语句 | LOOP、WHILE和REPEAT语句 |
跳转语句 | ITERATE 和 LEAVE语句 |
根据不同的条件|值执行不同的语句,IF语句语法如下:
if condition1 then 执行1
if condition2 then 执行2
...
if conditionN then 执行n
else 执行m
end if
其实if函数
也是有这样功能,if(表达式1,表达式2,表达式3):执行顺序,如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值
可以学习: MySQL常用函数大全
delimiter $
create procedure girls.demo5(IN scores float, OUT tip varchar(20))
begin
IF scores < 60 THEN
set tip = '不及格,加油';
ELSEIF scores >= 60 and scores < 70 THEN
set tip = '一般噢';
ELSEIF scores >= 70 and scores < 80 THEN
set tip = '良好';
ELSEIF scores >= 80 and scores < 90 THEN
set tip = '优秀';
ELSE
set tip = '非常优秀';
END IF;
end$
delimiter ;
call demo5(80,@tip);
select @tip;
CASE语句是分支语句结构,语法如下:
情况1:类似Java中的switch语句,一般用于等值判断
CASE 变量|表达式|字段
when 要判断的值 then 返回的值1或者语句1;
when 要判断的值 then 返回的值2或者语句2;
...
ELSE 要判断的值n或者语句n;
END CASE;
案例:
-- 创建存储过程
delimiter $
CREATE PROCEDURE girls.example_case(IN x INT)
BEGIN
CASE x
WHEN 1 THEN SELECT 1;
WHEN 2 THEN SELECT 2;
ELSE SELECT 3;
END CASE;
END$;
delimiter ;
-- 调用存储过程
CALL example_case(5);
情况2:类似Java中的多重IF语句,一般用于实现区间判断
CASE
when 要判断的条件1 then 返回的值1或者语句1;
when 要判断的条件2 then 返回的值2或者语句2;
...
ELSE 返回的值n或者语句n;
END CASE;
案例:
delimiter $
create procedure girls.demo6(IN scores float, OUT tip varchar(20))
begin
case
when scores < 60 then set tip = '不及格';
when scores >= 60 and scores < 70 then set tip = '一般';
when scores >= 70 and scores < 80 then set tip = '良好';
when scores >= 80 and scores < 90 then set tip = '优秀';
else set tip = '非常优秀';
end case;
end$
delimiter ;
call demo6(80,@tip);
select @tip;
LOOP循环语句用来重复执行某些语句,LOOP语句语法如下:
[loop_label:] LOOP
循环执行的语句
END LOOP
loop_label:表示LOOP语句的标注名称,该参数可以省略,可以用于跳出循环。
delimiter $
create procedure girls.test_loop(OUT sum INT)
begin
declare i int default 1;
declare s int default 0;
loop_label1:
loop
if i > 100 then
leave loop_label1; # 跳出循环
end if;
set s = s + i;
set i = i + 1;
end loop;
set sum = s;
end $
delimiter ;
call test_loop(@sum);
select @sum;
编写时候,参照Java的for循环语句:
for(int i = 1; i <=100;i++){
sum = sum + i;
}
首先判断condition条件是否为真,如果是则执行循环体,否则退出循环。该语法表示形式如下:
WHILE condition DO
...
END WHILE;
案例:计算前1+2+3+…+100的和:
-- 创建存储过程
CREATE PROCEDURE example_while(OUT sum INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;
WHILE i <= 100 DO
SET s = s+i;
SET i = i+1;
END WHILE;
SET sum = s;
END;
-- 调用存储过程
CALL example_while(@sum);
SELECT @sum;