MySQL学习-流程控制-LOOP与WHILE语句

290 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

前言

上篇我们学习了MySQL中的流程控制-IF与CASE语句。有兴趣的小伙伴可以阅读(# MySQL学习-流程控制-IF与CASE语句)。
下面我们学习MySQL中的流程控制-LOOP与WHILE语句。

LOOP语句

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

LOOP语法:

[loop_label:] LOOP
    循环执行的语句
END LOOP [loop_label]

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

举例一

id值小于10时重复执行循环。

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;

举例二

创建存储过程update_salary_loop(),声明OUT参数num,输出循环次数。存储过程中实现循环给大家涨薪,薪资涨为原来的1.1倍。直到全公司的平均薪资达到12000结束。并统计循环次数。

DELIMITER //
CREATE PROCEDURE update_salary_loop(OUT num INT)
BEGIN
    DECLARE avg_salary DOUBLE;
    DECLARE loop_count INT DEFAULT 0;
    SELECT AVG(salary) INTO avg_salary
    FROM employees;
    label_loop:LOOP
        IF avg_salary > 12000 
        THEN LEAVE label_loop;
        END IF;
        UPDATE employees SET salary = salary * 1.1;
        SET loop_count = loop_count + 1;
        SELECT AVG(salary) INTO avg_salary
        FROM employees;
    END LOOP label_loop;
    SET num = loop_count;
END //
DELIMITER ;

WHILE语句

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

[while_label:] WHILE 循环条件 DO
    循环体
END WHILE [while_label];

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

举例一

i值小于10时,将重复执行循环过程。

DELIMITER //
CREATE PROCEDURE test_while()
BEGIN
    DECLARE i INT DEFAULT 0;
    WHILE i < 10 DO
        SET i = i + 1;
    END WHILE;
    SELECT i;
END //
DELIMITER ;

举例二

声明存储过程,update_salary_while(),声明OUT参数num,输出循环次数。存储过程中实现循环给大家降薪,薪资降为原来的90%。直到全公司的平均薪资达到5000结束。并统计循环次数。

DELIMITER //
CREATE PROCEDURE update_salary_while(OUT num INT)
BEGIN
    DECLARE avg_sal DOUBLE;
    DECLARE while_count INT DEFAULT 0;
    SELECT AVG(salary) INTO avg_salary
    FROM employees;
    WHILE avg_sal > 5000 DO
        UPDATE employees 
        SET salary = salary * 0.9;
        SET while_count = while_count + 1;
        SELECT AVG(salary) INTO avg_salary
        FROM employees;
    END WHILE;
    SET num = while_count;
END //
DELIMITER ;

今天先学习到这里,明天继续。