MySQL流程控制结构[数据库教程]

database

一、分支结构

  #1.if 函数

    语法:if(条件  ,  值1,值2)
    功能:实现双分支
    应用在begin end中或外面

 

  

  #2.case 结构

    语法:
    情况1:类似于switch
      case 变量或表达式
      when 值1 then 语句1;
      when 值2 then 语句2;
        ...
      else 语句n;
      end

    

    情况2:
      case
      when 条件1 then 语句1;
      when 条件2 then 语句2;
        ...
      else 语句n;
      end

      应用在begin end 中或外面

 

  #3.if  结构

    语法:
      if  条件 1  then  语句1;
      else if 条件2 then 语句2;
        ....
      else  语句n;
      end if;
    功能:类似于多重if

    只能应用在begin end 中

 

#案例1:创建函数,实现传入成绩,如果成绩>90,返回A,如果成绩>80,返回B,如果成绩>60,返回C,否则返回D

CREATEFUNCTION test_if(score FLOAT) RETURNSCHAR

BEGIN

DECLARE ch CHARDEFAULTA;

IF score>90THENSET ch=A;

ELSEIF score>80THENSET ch=B;

ELSEIF score>60THENSET ch=C;

ELSESET ch=D;

ENDIF;

RETURN ch;

END $

SELECT test_if(87)$

 

#案例2:创建存储过程,如果工资<2000,则删除,如果5000>工资>2000,则涨工资1000,否则涨工资500

CREATEPROCEDURE test_if_pro(IN sal DOUBLE)

BEGIN

IF sal<2000THENDELETEFROM employees WHERE employees.salary=sal;

ELSEIF sal>=2000AND sal<5000THENUPDATE employees SET salary=salary+1000WHERE employees.`salary`=sal;

ELSEUPDATE employees SET salary=salary+500WHERE employees.`salary`=sal;

ENDIF;

END $

CALL test_if_pro(2100)$

 

#改进--案例1:创建函数,实现传入成绩,如果成绩>90,返回A,如果成绩>80,返回B,如果成绩>60,返回C,否则返回D

CREATEFUNCTION test_case(score FLOAT) RETURNSCHAR

BEGIN

DECLARE ch CHARDEFAULTA;

CASE #------case块

WHEN score>90THENSET ch=A;

WHEN score>80THENSET ch=B;

WHEN score>60THENSET ch=C;

ELSESET ch=D;

ENDCASE;

RETURN ch;

END $

SELECT test_case(56)$

 

 

二、循环结构

  分类:
    while、loop、repeat

  循环控制:

  iterate类似于 continue,继续,结束本次循环,继续下一次
  leave 类似于  break,跳出,结束当前所在的循环

 

 

  #1.while

    语法:

      【标签:】while 循环条件 do
     循环体;
       end while【 标签】;

    联想:

       while(循环条件){

         循环体;
       }

 

  #2.loop

    语法:
      【标签:】loop
       循环体;
       end loop 【标签】;

    

    可以用来模拟简单的死循环

 

 

  #3.repeat
    语法:
      【标签:】repeat
       循环体;
        until 结束循环的条件
        end repeat 【标签】;

 

 

#1.没有添加循环控制语句
#案例:批量插入,根据次数插入到admin表中多条记录

DROPPROCEDURE pro_while1$

CREATEPROCEDURE pro_while1(IN insertCount INT)

BEGIN

DECLARE i INTDEFAULT1;

WHILE i<=insertCount DO

INSERTINTO admin(username,`password`) VALUES(CONCAT(Rose,i),666);

SET i=i+1;

ENDWHILE;

END $

CALL pro_while1(100)$

/*  java 对应

int i=1;
while(i<=insertcount){

 //插入
 
 i++;

}

*/


#2.添加leave语句

#案例:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止

TRUNCATETABLE admin $ 

DROPPROCEDURE test_while1 $

CREATEPROCEDURE test_while1 (IN insertCount INT)

BEGIN

DECLARE i INTDEFAULT1 ;

a:WHILE i<=insertCount DO

INSERTINTO admin(username,`password`) VALUES(CONCAT(xiaohua,i),0000);

IF i>=20THEN LEAVE a;

ENDIF;

SET i=i+1;

ENDWHILE a;

END $

CALL test_while1(100)$

 

#3.添加iterate语句

#案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次

TRUNCATETABLE admin$

DROPPROCEDURE test_while1$

CREATEPROCEDURE test_while1(IN insertCount INT)

BEGIN

DECLARE i INTDEFAULT0;

a:WHILE i<=insertCount DO

SET i=i+1;

IF MOD(i,2)!=0THEN ITERATE a;

ENDIF;

INSERTINTO admin(username,`password`) VALUES(CONCAT(xiaohua,i),0000);

ENDWHILE a;

END $

CALL test_while1(100)$

/*

int i=0;
while(i<=insertCount){
 i++;
 if(i%2==0){
  continue;
 }
 插入
 
}

*/

 

 

 

 

 

 

 

 

 

MySQL--流程控制结构

原文:https://www.cnblogs.com/lfw421935678/p/13425830.html

以上是 MySQL流程控制结构[数据库教程] 的全部内容, 来源链接: utcz.com/z/535028.html

回到顶部