分支结构与循环结构(MySQL)
在 MySQL 中,流程控制结构 主要用于在存储过程和函数中实现复杂逻辑,整体可分为三类:
- 顺序结构:程序按顺序自上而下执行
- 分支结构:根据条件选择不同的执行路径
- 循环结构:在满足条件的情况下重复执行一段代码
一、分支结构
1. IF 函数(表达式级)
1.1 基本概念
IF() 是 MySQL 提供的 函数形式的分支结构,适用于简单的双分支判断。
1.2 语法
IF(expr1, expr2, expr3)
执行逻辑:
- 若
expr1为真 → 返回expr2 - 否则 → 返回
expr3
1.3 特点
- 属于 函数
- 可以出现在任何 SQL 语句中(
SELECT、WHERE、ORDER BY等) - 只适用于 简单二选一逻辑
1.4 示例
SELECT IF(1 > 0, 'YES', 'NO') AS result;
2. CASE 结构
2.1 语法形式
CASE case_value
WHEN when_value THEN statement_list
WHEN when_value THEN statement_list
...
ELSE statement_list
END CASE;
2.2 使用场景
CASE 有两种常见使用方式:
- 等值判断(类似 Java 的
switch) - 条件判断(类似多重
if-else)
2.3 特点
-
可以作为:
- 表达式(可嵌套在 SQL 中,任何位置使用)
- 独立语句(只能用于
BEGIN ... END中)
-
一旦匹配到条件即退出 CASE,不会继续向下匹配
-
与 C / Java 中的
switch不同,不需要break
2.4 示例:成绩等级判断(存储过程)
CREATE PROCEDURE test_case(IN score INT)
BEGIN
CASE
WHEN score >= 90 THEN
SELECT 'A' AS level_stu;
WHEN score >= 80 THEN
SELECT 'B' AS level_stu;
WHEN score >= 60 THEN
SELECT 'C' AS level_stu;
ELSE
SELECT 'D' AS level_stu;
END CASE;
END;
CALL test_case(75);
3. IF 结构(语句级)
3.1 基本概念
IF 语句 用于实现多重分支判断,是最常用、最灵活的分支结构。
3.2 语法
IF 条件1 THEN
语句1;
ELSEIF 条件2 THEN
语句2;
ELSEIF 条件3 THEN
语句3;
...
ELSE
语句N;
END IF;
3.3 特点
- 只能用于
BEGIN ... END代码块中 - 支持多分支判断
- 适用于复杂业务逻辑
3.4 示例:函数形式的成绩等级判断
CREATE FUNCTION test_case2(score INT) RETURNS CHAR(1)
BEGIN
IF score >= 90 THEN
RETURN 'A';
ELSEIF score >= 80 THEN
RETURN 'B';
ELSEIF score >= 60 THEN
RETURN 'C';
ELSE
RETURN 'D';
END IF;
END;
SELECT test_case2(85) AS result;
二、循环结构
MySQL 提供三种循环结构:
WHILELOOPREPEAT
并支持循环控制语句:
ITERATE:类似continue,结束本次循环,继续下一次LEAVE:类似break,跳出当前循环
1. WHILE 循环
1.1 语法
WHILE 循环条件 DO
循环体;
END WHILE;
1.2 带标签的写法
标签: WHILE 循环条件 DO
循环体;
END WHILE 标签;
1.3 示例:批量插入数据
CREATE PROCEDURE while_test(IN num INT)
BEGIN
DECLARE n INT DEFAULT 1;
WHILE n <= num DO
INSERT INTO admin(username, `password`)
VALUES (CONCAT('Rose_', n), 8888);
SET n = n + 1;
END WHILE;
END;
CALL while_test(50);
2. LOOP 循环
2.1 语法
【标签:】 LOOP
循环体;
END LOOP 【标签】;
2.2 特点
- 没有显式结束条件
- 通常配合
LEAVE使用 - 常用于模拟 死循环
3. REPEAT 循环
3.1 语法
【标签:】 REPEAT
循环体;
UNTIL 循环结束条件
END REPEAT 【标签】;
3.2 特点
- 先执行循环体,再判断条件
- 至少执行一次
4. LEAVE 与 ITERATE 示例
示例:当插入次数超过 20 时终止循环
CREATE PROCEDURE leave_test(IN num INT)
BEGIN
DECLARE n INT DEFAULT 1;
a: WHILE n <= num DO
INSERT INTO admin(username, `password`)
VALUES (CONCAT('Leslie_', n), 5555);
IF n >= 20 THEN
LEAVE a;
END IF;
SET n = n + 1;
END WHILE a;
END;
CALL leave_test(100);
三、小结
- IF 函数:适合简单双分支,属于表达式
- CASE:适合等值或区间判断,可作为表达式或语句
- IF 语句:最灵活的多分支结构
- WHILE / LOOP / REPEAT:三种循环机制,各有适用场景
- LEAVE / ITERATE:控制循环流程