第四节:MySQL中的流程控制语句

MySQL中的流程控制语句结构有:if、case、while、loop、repeat、iterate等语句。它们都只能在存储程序(procedure,function,trigger)内部使用

条件语句

if条件语句

  1. 语法格式:
    if 条件 then
    ...
    elseif 条件 then
      ...
    else
      ...
    end if
  2. 实例:
    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条件语句

  1. 语法格式一:
    格式:
        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 ?
  2. 语法格式二:
    格式:
        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循环语句

  1. while循环语句:while循环先执行循环判断条件,在执行循环体
  2. 语法格式:
    while 条件 DO
      循环体
    end while;
  3. 实例:求前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循环语句

  1. repeat循环语句:repeat循环先执行循环体,在执行循环判断条件
  2. 语法格式:
    repeat
      循环体
      until 循环判断条件
    end repeat
  3. 实例:求前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循环语句

  1. LOOP循环语句:loop循环没有循环判断条件,是无限死循环,不过可以使用leave关键字退出循环
  2. 语法格式:
    loop
      循环体
    end loop
  3. 实例:使求前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

  1. leave语句:
    1. leave经常和begin...end或者循环一起使用,表示跳出当前结构,使运行指令达到复合语句的最后一步。(有点类似于java中的break)
    2. 语法格式:leave label_name
  2. iterate语句:
    1. iterate经常和begin...end或者循环一起使用,表示退出本次循环,进入下次循环(有点类似于java中的continue,会再次回到循环开始语句)
    2. 语法:iterate label
  3. 实例:输出结果为 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?

     

 

posted @ 2019-12-12 09:30  WeiKing  阅读(408)  评论(0)    收藏  举报