• Mysql 流程控制


    简介

    我们可以在存储过程和函数中实现比较复杂的业务逻辑,但是需要对应的流程控制语句来控制,就像Java中分支和循环语句一样,在MySQL中也提供了对应的语句,接下来就详细的介绍下。

    在这里插入图片描述
    在这里插入图片描述

    1.分支结构

    1.1 IF语句
    IF 表达式1 THEN 操作1
    [ELSEIF 表达式2 THEN 操作2]……
    [ELSE 操作N]
    END IF
    
    • 1
    • 2
    • 3
    • 4

    案例:

    # IF语句的基本使用
    CREATE PROCEDURE PROC_IF2(IN age int)
    BEGIN
    #DECLARE AGE INT(3) DEFAULT 12;
    IF AGE < 18
    THEN SELECT '未成年';
    ELSEIF AGE BETWEEN 18 AND 30 THEN SELECT '青年人';
    ELSEIF AGE BETWEEN 30 AND 60 THEN SELECT '中年人';
    ELSE SELECT '老年人';
    END IF;
    END;
    # 调用存储过程
    CALL PROC_IF2(77) ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1.2 CASE语句

    CASE语句的语法结构1:

    #情况一:类似于switch
    CASE 表达式
    WHEN1 THEN 结果1或语句1(如果是语句,需要加分号)
    WHEN2 THEN 结果2或语句2(如果是语句,需要加分号)
    ...
    ELSE 结果n或语句n(如果是语句,需要加分号)
    END [case](如果是放在begin end中需要加上case,如果放在select后面不需要)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    CASE语句的语法结构2:

    #情况二:类似于多重if
    CASE
    WHEN 条件1 THEN 结果1或语句1(如果是语句,需要加分号)
    WHEN 条件2 THEN 结果2或语句2(如果是语句,需要加分号)
    ...
    ELSE 结果n或语句n(如果是语句,需要加分号)
    END [case](如果是放在begin end中需要加上case,如果放在select后面不需要)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.循环结构

    2.1 LOOP语句

    LOOP循环语句用来重复执行某些语句。LOOP内的语句一直重复执行直到循环被退出(使用LEAVE子句),跳出循环过程。

    [loop_label:] LOOP
    循环执行的语句
    END LOOP [loop_label]
    
    • 1
    • 2
    • 3

    其中,loop_label表示LOOP语句的标注名称,该参数可以省略

    案例:使用LOOP语句循环操作,循环10次后退出

    # 使用LOOP语句进行循环,循环10次,输出信息
    # 创建存储过程,使用LOOP处理循环操作
    CREATE PROCEDURE PROC_LOOP()
    BEGIN
    DECLARE I INT DEFAULT 0 ;
    ADD_LOOP:LOOP
    SELECT I;
    SET I = I + 1;
    IF I >= 10 THEN LEAVE ADD_LOOP;
    END IF;
    END LOOP ADD_LOOP;
    END;
    
    # 调用存储过程
    CALL PROC_LOOP();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    2.2 WHILE语句

    WHILE语句创建一个带条件判断的循环过程。WHILE在执行语句执行时,先对指定的表达式进行判断,如果为真,就执行循环内的语句,否则退出循环。WHILE语句的基本格式如下:

    [while_label:] WHILE 循环条件 DO
    循环体
    END WHILE [while_label];
    
    • 1
    • 2
    • 3

    案例:创建存储过程,并通过while语句循环10次

    # 创建一个存储过程,使用WHILE来实现10次循环的操作
    CREATE PROCEDURE PROC_WHILE1()
    BEGIN
    DECLARE I INT DEFAULT 0;
    ADD_WHILE:WHILE I <= 10 DO
    # 在循环体中我们需要修改条件变量
    SELECT I ;
    SET I = I + 1;
    END WHILE ADD_WHILE;
    END;
    # 在WHILE循环中我们省略了 while_lable
    CREATE PROCEDURE PROC_WHILE2()
    BEGIN
    DECLARE I INT DEFAULT 0;
    WHILE I <= 10 DO
    # 在循环体中我们需要修改条件变量
    SELECT I ;
    SET I = I + 1;
    END WHILE ;
    END;
    
    # 调用存储过程
    CALL PROC_WHILE1();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    2.3 REPEAT语句

    REPEAT语句创建一个带条件判断的循环过程。与WHILE循环不同的是,REPEAT 循环首先会执行一次循环,然后在 UNTIL 中进行表达式的判断,如果满足条件就退出,即 END REPEAT;如果条件不满足,则会就继续执行循环,直到满足退出条件为止。

    [repeat_label:] REPEAT
    循环体的语句
    UNTIL 结束循环的条件表达式
    END REPEAT [repeat_label]
    
    • 1
    • 2
    • 3
    • 4

    案例:创建存储过程,通过REPEAT语句实现循环5次的操作

    # 创建一个存储过程,循环5次
    CREATE PROCEDURE PROC_REPEAT()
    BEGIN
    DECLARE I INT DEFAULT 0;
    REPEAT
    # SELECT I;
    SET I = I + 1;
    UNTIL I >= 5
    END REPEAT ;
    SELECT I;
    END;
    DROP PROCEDURE PROC_REPEAT;
    # 调用存储过程
    CALL PROC_REPEAT();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2.4 对比三种循环结构
      1. 这三种循环都可以省略名称,但如果循环中添加了循环控制语句(LEAVE或ITERATE)则必须添加名称。
      1. LOOP:一般用于实现简单的"死"循环
        WHILE:先判断后执行
        REPEAT:先执行后判断,无条件至少执行一次

    3.跳转语句

    3.1 LEAVE语句

    LEAVE语句:可以用在循环语句内,或者以 BEGIN 和 END 包裹起来的程序体内,表示跳出循环或者跳出程序体的操作。如果你有面向过程的编程语言的使用经验,你可以把 LEAVE 理解为 break。

    基本格式如下:

    LEAVE 标记名
    -- 其中,label参数表示循环的标志。LEAVE和BEGIN ... END或循环一起被使用
    
    • 1
    • 2

    案例:

    CREATE PROCEDURE PROC_LOOP()
    BEGIN
    DECLARE I INT DEFAULT 0 ;
    ADD_LOOP:LOOP
    SELECT I;
    SET I = I + 1;
    IF I >= 10 THEN LEAVE ADD_LOOP; # LEAVE ADD_LOOP;退出LOOP循环 相当Java中的break关键字
    END IF;
    END LOOP ADD_LOOP;
    END;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3.2 ITERATER语句

    ITERATE语句:只能用在循环语句(LOOP、REPEAT和WHILE语句)内,表示重新开始循环,将执行顺序转到语句段开头处。如果你有面向过程的编程语言的使用经验,你可以把 ITERATE 理解为continue ,意思为“再次循环”。

    ITERATE label
    -- label参数表示循环的标志。ITERATE语句必须跟在循环标志前面
    
    • 1
    • 2

    案例:

    # 跳转语句的使用
    CREATE PROCEDURE PROC_ITERATE() BEGIN DECLARE I INT DEFAULT 0; ADD_LOOP :LOOP 
    SET 
      I = I + 1; IF I & gt;= 10 THEN LEAVE ADD_LOOP; # LEAVE 结束当前循环语句
      END IF; IF I = 5 THEN ITERATE ADD_LOOP; # ITERATE 跳过当前循环开始下一场循环
      END IF; 
    SELECT 
      I; END LOOP ADD_LOOP; END; 
    
    # 调用存储过程
    CALL PROC_ITERATE();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    基于Hadoop的疫情信息分析与可视化研究——包含大屏可视化及预测算法
    Golang net/http 标准库源码学习
    【最详细】最新最全Java基础面试题(91道)
    Java基础题08——数组(查找下标所对应的值)
    Spring boot 处理复杂json接收,同种类型、不同场景处理
    /dev下没有video0这个文件(ubuntu无法打开摄像头)
    Maven环境搭建
    开源视频监控服务器Shinobi
    GBase 8c V3.0.0数据类型——文本检索调试函数
    C++向指定内存地址写入数据(Windows)
  • 原文地址:https://blog.csdn.net/weixin_46370595/article/details/132710012