MySQL-流程控制语句

一、条件判断语句

Ⅰ、分支结构-If

​ ①不同的表达式对应不同的操作

​ ② 使用在begin end中

​ ③语法定义:

sql 复制代码
IF 表达式1 THEN 操作1
[ELSEIF 表达式2 THEN 操作2]......
[ELSE 操作N]
END IF

#举例
DELIMITER //
CREATE PROCEDURE update_salary_by_eid2(IN emp_id INT)
BEGIN
DECLARE emp_salary DOUBLE;
DECLARE hire_year DOUBLE;
SELECT salary INTO emp_salary FROM employees WHERE employee_id = emp_id;
SELECT DATEDIFF(CURDATE(),hire_date)/365 INTO hire_year
FROM employees WHERE employee_id = emp_id;
IF emp_salary < 8000 AND hire_year > 5
THEN UPDATE employees SET salary = salary + 500 WHERE employee_id =
emp_id;
ELSE
UPDATE employees SET salary = salary + 100 WHERE employee_id = emp_id;
END IF;
END //
DELIMITER ;

Ⅱ、分支结构-case

​ ①类似与 Java 中 if···esle if···else··

​ ②类似于 Java 中 switch 语句

​ ③语法:

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

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

二、循环语句

Ⅰ、循环结构-loop

​ ①用来重复执行某些语句,直到循环退出(使用 leave 子句)跳出循环

​ ②语法:

sql 复制代码
[loop_lable : ] Loop
	循环执行语句
end Loop [loop_lable]

#示例
DELIMITER //
CREATE PROCEDURE loop_example()
BEGIN
    DECLARE id INT DEFAULT 0;
    loop_start: LOOP
        SET id = id + 1;
        SELECT id;

        IF id >= 10 THEN
            LEAVE loop_start;
        END IF;
    END LOOP loop_start;
END;
DELIMITER ;

call loop_example();

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

Ⅱ、循环结构-while

​ ①创建一个带条件判断的循环过程。WHILE在执行语句执行时,先对指定的表达式进行判断,如

果为真,就执行循环内的语句,否则退出循环;

​ ②语法

sql 复制代码
[while_label:] WHILE 循环条件 DO
循环体
END WHILE [while_label];

#示例
DELIMITER //
CREATE PROCEDURE while_example()
BEGIN
    DECLARE id INT DEFAULT 0;
    while_start: while (id<10) do
        SET id = id + 1;
        end while while_start;
        SELECT id;
END;
DELIMITER ;

call while_example();

Ⅲ、循环结构-repeat

​ ①REPEAT 循环首先会执行一次循环,然后在 UNTIL 中进行表达式的判断,如果满足条件就退出,即 END REPEAT;如果条件不满足,则继续执行循环,直到满足退出条件为止。

​ ②语法:

sql 复制代码
 [repeat_label :] repeat
 	循环体
UNTIL 结束循环的条件表达式
END REPEAT [repeat_label

#示例
DELIMITER //
CREATE PROCEDURE repeat_example()
BEGIN
    DECLARE id INT DEFAULT 0;
    repeat_start: repeat
        SET id = id + 1;
        until id>=10
    end repeat ;
        SELECT id;
END;
DELIMITER ;

call repeat_example();

三、跳转语句

Ⅰ、跳转语句-LEAVE语句

​ ①可以用在循环语句内,或者以 BEGIN 和 END 包裹起来的程序体内,表示跳出循环或者跳出程序体的操作

​ ②可以将其理解为 Java 中的 break 语句

​ ③语法:

sql 复制代码
LEAVE 标记名

#示例
DELIMITER //
CREATE PROCEDURE leave_example()
BEGIN
    DECLARE id INT DEFAULT 0;
    leave_start: repeat
        SET id = id + 1;
        IF id = 5 THEN
            LEAVE leave_start;
        END IF;
        until id>=10
    end repeat ;
        SELECT id;
END;
DELIMITER ;

call leave_example();

Ⅱ、跳转语句之ITERATE语句

​ ①只能用在循环语句(LOOP、REPEAT和WHILE语句)内,表示重新开始循环,将执行顺序转到语句段开头处。

​ ②将其理解为 Java 中的 continue 语句

​ ③label参数表示循环的标志。ITERATE语句必须跟在循环标志前面。

​ ④语法:

sql 复制代码
ITERATE label

#示例
DELIMITER //
CREATE PROCEDURE iterate_example()
BEGIN
    DECLARE id INT DEFAULT 0;
    iterate_start: repeat
        SET id = id + 1;
        IF id = 5 THEN
            iterate iterate_start;
        END IF;
        SELECT id;
        until id>=10
    end repeat ;

END;
DELIMITER ;

call iterate_example();
相关推荐
且行志悠30 分钟前
Mysql的使用
mysql
白鹭31 分钟前
MySQL源码部署(rhel7)
数据库·mysql
666和7771 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗1 小时前
SpringMVC(一)
数据库
星期天要睡觉2 小时前
MySQL 综合练习
数据库·mysql
Y4090012 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
JosieBook3 小时前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql
处女座_三月3 小时前
改 TDengine 数据库的时间写入限制
数据库·sql·mysql