【DataBase】MySQL 28 流程控制

一、分支结构

1、IF函数

语法:

IF(表达式1, 表达式2, 表达式3)  

类似三元运算符,表达式1返回True Or False

True执行表达式2,False执行表达式3

IF实现多分枝结构

IF 条件 THEN 语句;
ELSEIF 条件 THEN 语句;
ELSEIF 条件 THEN 语句;
... ...
ELSE 语句;
END IF;

只能应用在BEGIN & END 中

 

2、CASE结构

用于等值判断处理,也可以多判断处理

CASE 变量、字段、函数、表达式
WHEN 要判断的值1 THEN 返回值1或者语句 WHEN 要判断的值2 THEN 返回值2或者语句 WHEN 要判断的值3 THEN 返回值3或者语句 ... ... ELSE 返回值N或者语句
END

不是等值判断,以条件判断的语法:

CASE 

WHEN 条件1 THEN 返回值1或者语句
WHEN 条件2 THEN 返回值2或者语句
WHEN 条件3 THEN 返回值3或者语句
... ...
ELSE 返回值N或者语句

END

二、分支案例:

成绩分级

DELIMITER $

CREATE PROCEDURE scoreCase(IN score INT);
BEGIN
	CASE
	WHEN score >= 90 AND score <= 100 THEN SELECT 'A';
	WHEN score >= 80 THEN SELECT 'B';
	WHEN score >= 60 THEN SELECT 'C';
	ELSE SELECT 'D';
	END CASE;
END $

调用

CALL scoreCase(77);

使用多重IF

DELIMITER $

CREATE FUNCTION scoreByIf(score INT) RETURNS CHAR
BEGIN
	IF score >= 90 AND score <= 100 THEN RETURN 'A';
	ELSEIF score >= 80 THEN RETURN 'B';
	ELSEIF score >= 60 THEN RETURN 'C';
	ELSE RETURN 'D';
	END IF;
END $

调用

SELECT scoreByIf(80) 

三、循环结构

三种循环类型:

WHILE、LOOP、REPEAT

循环控制:

iterate == continue 继续,结束本次循环,进入下一次循环
leave == break ,跳出当前的循环

WHILE语法:

[标签 :] WHILE 循环条件 DO
    循环体内的逻辑
END WHILE [标签];

LOOP语法:

[标签 :] LOOP 
    循环体内的逻辑
END LOOP[标签];

REPEAT语法:

[标签 :] REPEAT
    循环体内的逻辑
UTIL 结束循环的条件
END REPEAT [标签];

四、循环案例:

批量插入ADMIN表中

DELIMITER $;
CREATE PROCEDURE batchByWhile(IN insertCount INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	
	WHILE i <= insertCount DO
		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
		SET i = i + 1;
	END WHILE;
END 

调用

CALL batchByWhile(777);

 带标签的处理:

TRUNCATE admin;

DELIMITER $;
CREATE PROCEDURE batchByWhile2(IN insertCount INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	
	r1:WHILE i <= insertCount DO
		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
		IF i >= 30 THEN LEAVE r1;
		END IF;
		SET i = i + 1;
	END WHILE r1;
END $

调用:

CALL batchByWhile2(100);

使用迭代处理:

DELIMITER $;
CREATE PROCEDURE batchByWhile3(IN insertCount INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	
	r1:WHILE i <= insertCount DO
		SET i = i + 1;
		IF MOD(i, 2) != 0 THEN ITERATE r1;
		END IF;
		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
	END WHILE r1;
END $

调用

CALL batchByWhile3(222);

 

posted @ 2020-11-04 11:34  emdzz  阅读(83)  评论(0编辑  收藏  举报