
这些存储过程经过一次编译后,可以被反复调用,无需再次编译,从而大大提高了数据库操作的效率和可重用性
而在存储过程中,分支语句则扮演着至关重要的角色,它们能够根据不同的条件执行不同的代码块,使得存储过程能够处理更加复杂和多样的业务逻辑
本文将详细探讨MySQL存储过程中的分支语句,包括IF语句、CASE语句等,并通过实际案例展示其应用
一、IF语句 IF语句是MySQL存储过程中最常用的分支语句之一,它根据指定的条件来执行不同的代码块
IF语句的基本语法如下: sql IF condition THEN -- 当条件成立时执行的语句 ELSEIF condition2 THEN -- 当第二个条件成立时执行的语句(可选) ... ELSE -- 当所有条件都不成立时执行的语句(可选) END IF; 其中,`condition`是要判断的条件,如果条件成立,则执行THEN后面的语句;如果条件不成立,则检查ELSEIF部分是否有其他条件成立;如果所有条件都不成立,则执行ELSE部分的语句(如果存在)
案例1:判断年龄并返回相应字符串 我们可以创建一个存储过程,根据传入的年龄参数返回相应的字符串描述
sql DELIMITER $$ CREATE PROCEDURE p_if(IN age INT) BEGIN DECLARE ret VARCHAR(20); IF age <10 THEN SET ret = little; ELSEIF age BETWEEN10 AND20 THEN SET ret = young; ELSE SET ret = other; END IF; SELECT ret; END$$ DELIMITER ; 调用这个存储过程并传入不同的年龄参数,我们将得到不同的返回结果
sql CALL p_if(8);-- 返回 little CALL p_if(15); -- 返回 young CALL p_if(25); -- 返回 other 案例2:验证用户名和密码 在实际应用中,IF语句常用于验证用户名和密码等场景
我们可以创建一个存储过程,根据传入的用户名和密码在数据库中查找匹配记录,并返回验证结果
sql CREATE TABLE t3( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, passwd VARCHAR(20) NOT NULL ) ENGINE=INNODB CHARSET utf8; INSERT INTO t3 VALUES(1,tom,tompass),(2,jerry,jerrypass); DELIMITER $$ CREATE PROCEDURE verify(IN u VARCHAR(20), IN p VARCHAR(20)) BEGIN DECLARE num INT DEFAULT0; DECLARE res VARCHAR(20); SELECT COUNT() INTO num FROM t3 WHERE t3.username = u AND t3.passwd = p; IF num >0 THEN SET res = successful; ELSE SET res = failed; END IF; SELECT res; END$$ DELIMITER ; 调用这个存储过程并传入用户名和密码,我们将得到验证结果
sql CALL verify(tom, tompass);-- 返回 successful CALL verify(tom, wrongpass); -- 返回 failed 二、CASE语句 CASE语句是另一种在MySQL存储过程中常用的分支语句,它根据不同的条件执行不同的代码块
CASE语句有两种语法形式:简单CASE表达式和搜索CASE表达式
简单CASE表达式: sql CASE case_value WHEN when_value1 THEN result1 WHEN when_value2 THEN result2 ... ELSE default_result END CASE; 其中,`case_value`是要与各个`when_value`进行比较的值
如果`case_value`等于某个`when_value`,则执行相应的`result`语句;如果没有匹配的`when_value`,则执行ELSE部分的`default_result`语句(如果存在)
搜索CASE表达式: sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END CASE; 其中,各个`condition`是要判断的条件
如果某个条件成立,则执行相应的`result`语句;如果没有任何条件成立,则执行ELSE部分的`default_result`语句(如果存在)
案例:根据分数返回等级 我们可以创建一个存储过程,根据传入的分数参数返回相应的等级描述
这里我们使用搜索CASE表达式
sql DELIMITER $$ CREATE PROCEDURE p_case(IN score INT) BEGIN DECLARE grade VARCHAR(10); CASE WHEN score >=90 THEN SET grade = A; WHEN score >=80 THEN SET grade = B; WHEN score >=70 THEN SET grade = C; ELSE SET grade = D; END CASE; SELECT grade; END$$ DELIMITER ; 调用这个存储过程并传入不同的分数参数,我们将得到不同的等级结果
sql CALL p_case(95);-- 返回 A CALL p_case(85);-- 返回 B CALL p_case(65);-- 返回 C CALL p_case(55);-- 返回 D 案例:根据薪资返回薪资水平描述 另一个使用CASE语句的实际案例是根据薪资返回薪资水平描述
我们可以创建一个存储过程,根据传入的薪资参数返回相应的薪资水平描述
sql DELIMITER $$ CREATE PROCEDURE p_salary_level(IN salary INT) BEGIN DECLARE res VARCHAR(10); CASE WHEN salary <5000 THEN SET res = too low; WHEN salary <10000 THEN SET res = low; WHEN salary <25000 THEN SET res = middle; ELSE SET res = high; END CASE; SELECT res; END$$ DELIMITER ; 调用这个存储过程并传入不同的薪资参数,我们将得到不同的薪资水平描述
sql CALL p_salary_level(4000);-- 返回 too low CALL p_salary_level(8000);-- 返回 low CA
MySQL中模拟Deleted记录处理技巧
MySQL存储过程中的分支语句种类详解
MySQL中循环调用函数的技巧
MySQL设置主键的实用指南
MySQL:高效管理唯一键的插删技巧
MySQL中name关键字的妙用指南
MySQL建表后添加外键指南
MySQL中模拟Deleted记录处理技巧
MySQL中循环调用函数的技巧
MySQL设置主键的实用指南
MySQL:高效管理唯一键的插删技巧
MySQL中name关键字的妙用指南
MySQL建表后添加外键指南
MySQL表安全模式配置指南
掌握技巧:如何使用命令提示符运行MySQL数据库
MySQL5.7.13默认密码揭秘
MySQL联表排序技巧揭秘
DB文件快速导入MySQL指南
Docker快速部署MySQL实例指南