MySQL笔记 22:流程控制结构

it2023-01-25  59

1. 分类

顺序结构:程序从上往下一次执行分支结构:程序从两条或多条路径中选择一条去执行循环结构:程序在满足一定条件的基础上,重复执行一段代码

2. 分支结构


2.1 if 函数

功能:实现简单的双分支语法:IF (表达式1, 表达式2, 表达式3)执行顺序:如果表达式1成立,则 IF 函数返回表达式2的值,否则返回表达式3的值

2.2 case结构


2.2.1 类似于java中的 switch 语句,一般用于实现等值判断

CASE 变量|表达式|字段 WHEN 要判断的值1 THEN 返回值1或语句1 WHEN 要判断的值2 THEN 返回值2或语句2 … ELSE 返回值n或语句n END CASE ;

2.2.2 类似于java中的多重 IF 语句,一般用于实现区间判断**

CASE WHEN 要判断的条件1 THEN 返回值1或语句1 WHEN 要判断的条件2 THEN 返回值2或语句2 … ELSE 返回值n或语句n END CASE ;

特点

既可以作为表达式,嵌套在其他语句中使用,此时任何位置都可以使用 也可以作为独立的语句去使用,此时只能用于 BEGIN END 中如果 when 中的值满足或条件成立,则执行对应的 THEN 后的语句,并且结束 CASE 如果都不满足,则执行 ELSE 中的语句或值ELSE 可以省略,此时如果所有的 WHEN 都不满足,则返回 NULL

2.3 if 结构

功能:实现多重分支语法:

IF 条件1 THEN 语句1 ; ELSEIF 条件2 THEN 语句2 ; … ELSE 语句n ; END IF ;

使用条件:只能放在 BEGIN END 中

2.4 实例

创建存储过程:根据传入的成绩来显示等级

CREATE PROCEDURE pro1 (IN score INT) BEGIN CASE WHEN score >= 90 THEN SELECT 'A' ; WHEN score >= 80 THEN SELECT 'B' ; WHEN score >= 60 THEN SELECT 'C' ; ELSE SELECT 'D' ; END CASE ; END $ CREATE FUNCTION fun_ko (score INT) RETURNS CHAR BEGIN DECLARE result CHAR ; IF score >= 90 THEN SELECT 'A' INTO result ; ELSEIF score >= 80 THEN SELECT 'B' INTO result ; ELSEIF score >= 60 THEN SELECT 'C' INTO result ; ELSE SELECT 'D' INTO result ; END IF ; RETURN result ; END $

3. 循环结构


3.1 分类

while

标签 : WHILE 循环条件 DO 循环体 ; END WHILE 标签;

loop(可模拟简单的死循环)

标签 : LOOP 循环体 ; END LOOP 标签;

repeat

标签 : REPEAT 循环体 ; UNTIL 结束循环的条件 END REPEAT 标签;

循环控制

iterate:作用类似于continueleave:作用类似于break

3.2 实例

批量插入,根据次数插入到表中多条记录

CREATE PROCEDURE pro_op (IN intimes INT) BEGIN insertBoys : WHILE intimes > 0 DO INSERT INTO boys (boyName, userCP) VALUES ('沈千枫', 120) ; SELECT intimes - 1 INTO intimes ; END WHILE insertBoys ; END $

批量插入,根据次数插入到表中多条记录,如果次数大于20则停止

CREATE PROCEDURE pro_lk (IN intimes INT) BEGIN DECLARE i INT DEFAULT 1; insertBoys : WHILE i <= intimes DO INSERT INTO boys (boyName, userCP) VALUES ('蓝湛', 1200) ; IF i>=20 THEN LEAVE insertBoys ; END IF ; SELECT i + 1 INTO i ; END WHILE insertBoys ; END $

批量插入,根据次数插入到表中多条记录,偶数的数值不插入

CREATE PROCEDURE pro_lk (IN intimes INT) BEGIN DECLARE i INT DEFAULT 0; insertBoys : WHILE i <= intimes DO SELECT i + 1 INTO i ; IF i%2=0 THEN ITERATE insertBoys ; END IF ; INSERT INTO boys (boyName, userCP) VALUES ('沈兰舟', 1200 + i) ; END WHILE insertBoys ; END $
最新回复(0)