解决复杂问题不可能通过一个 SQL 语句完成,我们需要执行多个 SQL 操作。流程控制语句的作用就是控制存储过程中 SQL 语句的执行顺序,是我们完成复杂操作必不可少的一部分

目录

流程的分类

通用分类

MySQL中的流程分类

分支结构 IF

分支结构 CASE

循环结构 WHILE

循环结构 LOOP

循环结构 REPEAT

对比三种循环结构


流程的分类

通用分类

顺序结构:程序从上往下依次执行

分支结构:程序按条件进行选择执行,从两条或多条路径选择一条执行

循环结构:程序满足一定条件下,重复执行一组语句

MySQL中的流程分类

条件判断语句:IF 语句和 CASE 语句

循环语句:LOOP、WHERE 和 REPEAT 语句

跳转语句:ITERATE 和 LEAVE 语句

分支结构 IF

1. 不同的表达式对应不同的操作

2. 使用在 begin end 中

IF 表达式1 THEN 操作1
[ELSEIF 表达式2 THEN 操作2]...
[ELSE 操作N]
END IF

分支结构 CASE

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

循环结构 WHILE

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

while_label 为 WHILE 语句的标注名称;如果循环条件为真,WHILE 语句内的语句或语句群被执行,直至循环条件为假,退出循环

[while_label:] WHILE 循环条件 DO
    循环体
END WHILE [while_label];
DELIMITER //
CREATE PROCEDURE test_while()
BEGIN
    DECLARE i INT DEFAULT 0;
    WHILE i < 10 DO
        SET i = i + 1;
    END WHILE;
    SELECT i;
END //

循环结构 LOOP

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

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

[loop_label:] LOOP
    循环执行语句
END LOOP [loop_label]
DECLARE id INT DEFAULT 0;
add_loop:LOOP
    SET id = id + 1;
    IF id >= 10 THEN LEAVE add_loop;
    END IF;
END LOOP add_loop;

循环结构 REPEAT

[repeat_label:] REPEAT
    循环体的语句
UNTIL 结束循环的条件表达式
END REPEAT [repeat_label]
DELIMITER //
CREATE PROCEDURE test_repeat()
BEGIN 
    #声明变量
    DECLARE num INT DEFAULT 1;
    REPEAT
        SET num = num + 1;
    UNTIL num >= 10;
    END REPEAT;
    #查看
    SELECT num;
END //
DELIMITER;

对比三种循环结构

1. 这三种循环都可以省略名称,但如果循环中添加了循环控制语句(LEAVE 或 ITERATE)则必须添加名称

2. LOOP:一般用于实现简单的 “死” 循环

    WHILE:先判断后执行

    REPEAT:先执行后判断,无条件至少执行一次

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐