第四节:MySQL中的流程控制语句
MySQL中的流程控制语句结构有:if、case、while、loop、repeat、iterate等语句。它们都只能在存储程序(procedure,function,trigger)内部使用
条件语句
if条件语句
- 语法格式:
if 条件 then ... elseif 条件 then ... else ... end if
- 实例:
delimiter ? create procedure if_example (in id int) begin if id = 1 then select 'this is first'; elseif id = 2 then select 'this is second'; else select 'this is three'; end if; end ?
case条件语句
- 语法格式一:
格式: case value WHEN 条件 THEN ... WHEN 条件 THEN ... ELSE ... end case 实例: create procedure case_example(in value int) begin case value when 1 then select 'this is 1'; when 2 then select 'this is 2'; else select 'this is 3'; end case; end ?
- 语法格式二:
格式: CASE WHEN 条件 THEN ... WHEN 条件 THEN ... ELSE ... END CASE 实例: create procedure case_example1(in value int) begin case when value>0 then select 'this is Positive number'; when value=0 then select 'this is zero'; else select 'this is negative'; end case; end ?
循环语句
while循环语句
- while循环语句:while循环先执行循环判断条件,在执行循环体
- 语法格式:
while 条件 DO 循环体 end while;
- 实例:求前10 的和
delimiter ? create procedure while_example(out sum int) begin declare i int default 1; declare j int default 0; while i <11 do set j = i+j; set i= i+1; end while; set sum = j; end? call while_example(@id)? select @id?
repeat循环语句
- repeat循环语句:repeat循环先执行循环体,在执行循环判断条件
- 语法格式:
repeat 循环体 until 循环判断条件 end repeat
- 实例:求前10 的和
create procedure repeat_example(out sum int) begin declare i int default 1; declare j int default 0; repeat set j = i+j; set i = i+1; until i >10 end repeat; set sum = j; end ? call repeat_example(@sum)? select @sum?
loop循环语句
- LOOP循环语句:loop循环没有循环判断条件,是无限死循环,不过可以使用leave关键字退出循环
- 语法格式:
loop 循环体 end loop
- 实例:使求前10的和
create procedure loop_example(out sum int) begin declare i int default 1; declare j int default 0; lable_loop: loop set j = j+i; set i = i+1; if i > 10 then leave lable_loop; select 9 --该语句没有执行 end if; end loop; set sum = j; end? call loop_example(@sum)? select @sum?
iterate和leave
- leave语句:
- leave经常和begin...end或者循环一起使用,表示跳出当前结构,使运行指令达到复合语句的最后一步。(有点类似于java中的break)
- 语法格式:leave label_name
- iterate语句:
- iterate经常和begin...end或者循环一起使用,表示退出本次循环,进入下次循环(有点类似于java中的continue,会再次回到循环开始语句)
- 语法:iterate label
- 实例:输出结果为 1 和 1
create procedure iterate_example() begin declare i int default 1; declare j int default 0; loop_label:loop set j = j + i; set i = i + 1; if i = 4 then leave loop_label; elseif i = 3 then iterate loop_label; select j; elseif i = 2 then select j; else select 7; end if; select j; end loop; end?

浙公网安备 33010602011771号