首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
5.1 MySQL存储引擎
5.1.1 MySQL存储引擎的概念
5.1.2 查询MySQL中支持的存储引擎
5.1.3 InnoDB存储引擎
5.1.4 MyISAM存储引擎
5.1.5 MEMORY存储引擎
5.1.6 选择存储引擎
5.1.7 设置数据表的存储引擎
5.2 MySQL数据类型
5.2.1 数字类型
5.2.2 字符串类型
5.2.3 日期和时间类型
6.1 创建数据表(CREATE TABLE语句)
6.2 查看表结构
6.2.1 使用SHOW COLUMNS语句查看
6.2.2 使用DESCRIBE语句查看
6.3 修改表结构(ALTER TABLE语句)
6.3.1 添加新字段和修改字段定义
6.3.2 修改字段名/类型
6.3.3 删除字段
6.3.4 修改表名
6.4 重命名表(RENAME TABLE语句)
6.5 复制表(CREATE TABLE…LIKE语句)
6.6 删除表(DROP TABLE语句)
7.1 运算符
7.1.1 算术运算符
7.1.2 比较运算符
7.1.3 逻辑运算符
7.1.4 位运算符
7.2 流程控制语句
7.2.1 IF语句
7.2.2 CASE语句
7.2.3 WHILE循环语句
7.2.4 LOOP循环语句
7.2.5 REPEAT循环语句
8.1 增添数据
8.1.1 使用INSERT…VALUES语句插入数据
8.1.2 使用INSERT…SET语句插入数据
8.1.3 使用INSERT...SELECT语句插入查询结果
8.2 修改数据
8.3 删除数据
8.3.1 使用DELETE语句删除数据
8.3.2 使用TRUNCATE TABLE语句删除数据
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(二)
小册名称:MySQL从入门到精通(二)
### 7.2 流程控制语句 在MySQL中,流程控制语句是编写复杂存储过程、函数以及触发器时不可或缺的工具。它们允许开发者根据特定条件执行不同的代码块,从而实现更灵活和强大的数据处理逻辑。本章将深入探讨MySQL中的流程控制语句,包括条件语句(IF...ELSE)、循环语句(LOOP、REPEAT、WHILE)以及CASE语句,帮助读者从基础到精通这些强大的编程结构。 #### 7.2.1 条件语句(IF...ELSE) 在MySQL中,`IF`语句是最基本的条件判断结构,用于根据条件表达式的真假来执行不同的代码块。`IF`语句的基本语法如下: ```sql IF condition THEN -- 当condition为真时执行的语句 ELSE -- 当condition为假时执行的语句(可选) END IF; ``` 需要注意的是,`IF`语句在存储过程、函数或触发器中使用时,需要包含在BEGIN...END块内。下面是一个使用`IF`语句的简单示例,该示例根据员工的薪水调整其职位等级: ```sql DELIMITER // CREATE PROCEDURE AdjustPosition(IN emp_salary DECIMAL(10,2)) BEGIN DECLARE position_level VARCHAR(50); IF emp_salary >= 10000 THEN SET position_level = 'Senior'; ELSEIF emp_salary >= 5000 THEN SET position_level = 'Mid-level'; ELSE SET position_level = 'Entry-level'; END IF; SELECT CONCAT('Salary: ', emp_salary, ', Position Level: ', position_level) AS Result; END // DELIMITER ; ``` 在这个例子中,我们定义了一个名为`AdjustPosition`的存储过程,它接受一个员工的薪水作为参数,并根据薪水范围将员工的职位等级设置为“Senior”、“Mid-level”或“Entry-level”。 #### 7.2.2 循环语句 MySQL提供了三种循环语句:`LOOP`、`REPEAT`和`WHILE`,它们允许你根据条件重复执行一段代码块。 ##### 7.2.2.1 LOOP `LOOP`语句是最基本的循环结构,它会无限次地执行循环体内的语句,直到遇到`LEAVE`语句(类似于其他编程语言中的break)来跳出循环。`LOOP`语句的基本语法如下: ```sql [begin_label:] LOOP -- 循环体中的语句 IF condition THEN LEAVE loop_label; -- 根据条件跳出循环 END IF; END LOOP loop_label; ``` 注意,`LOOP`语句必须有一个`LEAVE`语句来避免无限循环。 ##### 7.2.2.2 REPEAT `REPEAT`语句与`LOOP`不同,它至少会执行一次循环体内的语句,然后在每次循环结束时检查条件。如果条件为真,则退出循环;如果为假,则继续下一次循环。`REPEAT`语句的基本语法如下: ```sql [begin_label:] REPEAT -- 循环体中的语句 UNTIL condition END REPEAT [end_label]; ``` 这里,`UNTIL`关键字后面跟的是退出循环的条件,且条件表达式的结果必须为真时才会退出循环。 ##### 7.2.2.3 WHILE `WHILE`语句是另一种常见的循环结构,它在满足条件时执行循环体内的语句。与`REPEAT`相反,`WHILE`在每次循环开始前检查条件。`WHILE`语句的基本语法如下: ```sql [begin_label:] WHILE condition DO -- 循环体中的语句 END WHILE [end_label]; ``` 如果条件为真,则执行循环体;如果条件为假,则跳过循环体,继续执行`WHILE`循环之后的语句。 #### 7.2.3 CASE语句 `CASE`语句是MySQL中用于实现多路分支的条件语句,类似于其他编程语言中的switch或if-else-if-else链。`CASE`语句可以在SELECT语句、存储过程、函数等中使用,其基本语法有两种形式:简单CASE表达式和搜索CASE表达式。 ##### 7.2.3.1 简单CASE表达式 简单CASE表达式通过比较表达式与一系列值来工作,当找到匹配时,执行相应的结果表达式。 ```sql CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE resultN END ``` ##### 7.2.3.2 搜索CASE表达式 搜索CASE表达式对每个WHEN子句中的条件表达式进行评估,当找到第一个为真的条件时,执行相应的结果表达式。 ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END ``` #### 实战案例 假设我们有一个员工表`employees`,包含字段`id`、`name`、`department`和`salary`。现在,我们需要编写一个存储过程,根据员工的部门和薪水,决定其奖金比例。以下是使用`CASE`语句和`IF`语句结合`WHILE`循环的示例: ```sql DELIMITER // CREATE PROCEDURE CalculateBonus() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE emp_id INT; DECLARE emp_dept VARCHAR(50); DECLARE emp_salary DECIMAL(10,2); DECLARE bonus_rate DECIMAL(5,2); DECLARE cur1 CURSOR FOR SELECT id, department, salary FROM employees; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur1; read_loop: LOOP FETCH cur1 INTO emp_id, emp_dept, emp_salary; IF done THEN LEAVE read_loop; END IF; CASE emp_dept WHEN 'Sales' THEN SET bonus_rate = CASE WHEN emp_salary >= 10000 THEN 0.15 WHEN emp_salary >= 5000 THEN 0.10 ELSE 0.05 END; WHEN 'Engineering' THEN SET bonus_rate = CASE WHEN emp_salary >= 12000 THEN 0.12 WHEN emp_salary >= 8000 THEN 0.08 ELSE 0.04 END; ELSE SET bonus_rate = 0.03; END CASE; -- 假设这里有一个更新员工奖金的语句 -- UPDATE employees SET bonus = emp_salary * bonus_rate WHERE id = emp_id; -- 输出结果,实际使用中应替换为更新操作 SELECT CONCAT('Employee ID:', emp_id, ', Bonus Rate:', bonus_rate) AS BonusInfo; END LOOP; CLOSE cur1; END // DELIMITER ; ``` 请注意,上述示例中的更新操作被注释掉了,仅用于展示如何根据条件计算奖金比例并输出结果。在实际应用中,你可能需要将计算结果直接更新到数据库表中。 通过以上内容,我们详细介绍了MySQL中的流程控制语句,包括条件语句(IF...ELSE)、循环语句(LOOP、REPEAT、WHILE)以及CASE语句。掌握这些语句的使用,将极大地增强你在MySQL中编写复杂逻辑的能力,为你的数据库应用增添更多灵活性和功能性。
上一篇:
7.1.4 位运算符
下一篇:
7.2.1 IF语句
该分类下的相关小册推荐:
MySQL从入门到精通(五)
MySQL从入门到精通(三)
MySQL从入门到精通(一)
细说MySQL(零基础到高级应用)
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(四)
MySQL8.0入门与实践
MySQL必会核心问题
MySQL 实战 45 讲