前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【重学 MySQL】八十一、揭秘分支结构王者——IF 的绝妙运用

【重学 MySQL】八十一、揭秘分支结构王者——IF 的绝妙运用

作者头像
用户11332765
发布2024-11-13 09:15:53
发布2024-11-13 09:15:53
12500
代码可运行
举报
文章被收录于专栏:编程编程
运行总次数:0
代码可运行
【重学 MySQL】八十一、揭秘分支结构王者——IF 的绝妙运用
在这里插入图片描述
在这里插入图片描述

流程控制分类

在 MySQL 中,流程控制是数据库编程的重要组成部分,它允许开发者根据条件执行不同的代码块。MySQL 的流程控制主要分为三类:顺序结构、分支结构和循环结构。其中,IF 语句是分支结构中的一种,用于在存储过程、函数和触发器中根据条件控制流程。

  1. 顺序结构
    • 程序从上到下依次执行,这是最基本的流程控制结构。
  2. 分支结构
    • 程序根据条件选择执行路径,从两条或多条路径中选择一条执行。
    • 分支结构包括 IF 语句、CASE 语句等。
  3. 循环结构
    • 程序在满足一定条件的基础上,重复执行一段代码。
    • 循环结构包括 LOOP、WHILE、REPEAT 等。

分支结构之 IF

在 MySQL 中,IF 语句是分支结构的核心,它允许根据条件执行不同的操作。以下是 IF 语句的详细语法结构及其在不同场景下的应用举例。

IF 语句的语法结构

代码语言:javascript
代码运行次数:0
运行
复制
IF 表达式1 THEN 操作1
[ELSEIF 表达式2 THEN 操作2]……
[ELSE 操作N]
END IF

这里,“[]”中的内容是可选的,表示可以添加多个 ELSEIF 分支以及一个最终的 ELSE 分支。

特点

  1. 不同的表达式对应不同的操作。
  2. IF 语句通常使用在 BEGIN…END 块中,特别是在存储过程、函数和触发器中。

举例

举例1:简单的 IF 语句应用

代码语言:javascript
代码运行次数:0
运行
复制
DELIMITER //

CREATE PROCEDURE check_val_null(IN val INT)
BEGIN
    IF val IS NULL THEN
        SELECT 'val is null';
    ELSE
        SELECT 'val is not null';
    END IF;
END //

DELIMITER ;

举例2:更新员工薪资(update_salary_by_eid1

代码语言:javascript
代码运行次数:0
运行
复制
DELIMITER //

CREATE PROCEDURE update_salary_by_eid1(IN emp_id INT)
BEGIN
    DECLARE emp_salary DECIMAL(10,2);
    DECLARE hire_year INT;

    -- 获取员工薪资和入职年数
    SELECT salary, TIMESTAMPDIFF(YEAR, hire_date, CURDATE()) INTO emp_salary, 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;
    END IF;
END //

DELIMITER ;

注意:在获取入职年数时,原示例使用了 DATEDIFF(CURDATE(),hire_date)/365,这种方法不够精确,因为一年可能有365天或366天。改用 TIMESTAMPDIFF(YEAR, hire_date, CURDATE()) 更为准确。

举例3:更新员工薪资(update_salary_by_eid2

代码语言:javascript
代码运行次数:0
运行
复制
DELIMITER //

CREATE PROCEDURE update_salary_by_eid2(IN emp_id INT)
BEGIN
    DECLARE emp_salary DECIMAL(10,2);
    DECLARE hire_year INT;

    -- 获取员工薪资和入职年数
    SELECT salary, TIMESTAMPDIFF(YEAR, hire_date, CURDATE()) INTO emp_salary, hire_year
    FROM employees WHERE employee_id = emp_id;

    -- 判断条件并执行更新
    IF emp_salary < 9000 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 ;

举例4:更新员工薪资和奖金比例(update_salary_by_eid3

代码语言:javascript
代码运行次数:0
运行
复制
DELIMITER //

CREATE PROCEDURE update_salary_by_eid3(IN emp_id INT)
BEGIN
    DECLARE emp_salary DECIMAL(10,2);
    DECLARE bonus_ratio DECIMAL(5,2);

    -- 获取员工薪资和奖金比例
    SELECT salary, bonus INTO emp_salary, bonus_ratio
    FROM employees WHERE employee_id = emp_id;

    -- 判断条件并执行更新
    IF emp_salary < 9000 THEN
        UPDATE employees SET salary = 9000 WHERE employee_id = emp_id;
    ELSEIF emp_salary >= 9000 AND emp_salary < 10000 AND bonus_ratio IS NULL THEN
        UPDATE employees SET bonus_ratio = 0.01 WHERE employee_id = emp_id;
    ELSE
        UPDATE employees SET salary = salary + 100 WHERE employee_id = emp_id;
    END IF;
END //

DELIMITER ;

注意:在举例4中,原示例中的 bonus 字段可能需要根据实际情况替换为正确的奖金比例字段名(如果数据库中该字段名为 bonus_ratio,则无需替换)。同时,由于示例中未明确奖金比例字段的存在,因此假设该字段名为 bonusbonus_ratio,并相应地进行了调整。在实际应用中,请确保字段名的正确性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【重学 MySQL】八十一、揭秘分支结构王者——IF 的绝妙运用
  • 流程控制分类
  • 分支结构之 IF
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档