Skip to content

MySQL流程控制中的分支与循环结构详解

Published:  at  04:32 AM

分支结构与循环结构(MySQL)

在 MySQL 中,流程控制结构 主要用于在存储过程和函数中实现复杂逻辑,整体可分为三类:


一、分支结构

1. IF 函数(表达式级)

1.1 基本概念

IF() 是 MySQL 提供的 函数形式的分支结构,适用于简单的双分支判断。


1.2 语法

IF(expr1, expr2, expr3)

执行逻辑:


1.3 特点


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 有两种常见使用方式:

  1. 等值判断(类似 Java 的 switch
  2. 条件判断(类似多重 if-else

2.3 特点


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 特点


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 提供三种循环结构:

并支持循环控制语句:


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 特点


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);

三、小结


Suggest Changes

Previous Post
MySQL安全管理:用户与权限控制详解
Next Post
MySQL存储过程与函数详解