数据库与Mysql - 14

流程控制结构

分类

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

分支结构

#1.IF函数

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

#2.CASE结构

情况1:类似于SWITCH语句,一般用于实现等值判断
--------------------------------------------
语法:
			CASE 变量|表达式|字段
			WHEN 要判断的值 THEN 返回的值1
			WHEN 要判断的值 THEN 返回的值2
			.....
			ELSE 要返回的值n
			END CASE;
---------------------------------------------

情况2:类似于多重IF语句,一般用于实现区间判断
---------------------------------------------
语法:
			CASE
			WHEN 要判断的条件1 THEN 返回的值1或语句1;
			WHEN 要判断的条件2 THEN 返回的值2或语句2;
			-----
			ELSE 要返回的值n或语句n;
			END CASE;
-----------------------------------------------
特点:
		可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,BEGIN END 中或BEGIN END 外面;
		可以作为独立的语句去使用,只能放在BEGIN END 中使用;
		ELSE 可以省略,如果ELSE省略了,并且所有WHEN条件都不满足,则返回NULL

#3.IF结构
功能

		实现多重分支	

语法

IF 条件1 THEN 语句1;
ELSEIF 条件2 THEN 语句2;
....
[ELSE 语句n;]
END IF;

应用场景

应用在BEGIN END中

分支结构-案例

#案例:创建存储过程,根据传入的成绩,来显示等级.
	  90-100,显示A;80-90显示B;60-80显示C,否则,显示D;
---------------------------------------------------------
CREATE PROCEDURE test_case(IN score INT)
BEGIN
			CASE
			WHEN score>=90 AND score <= 100 THEN SELCET 'A';
			WHEN score>=80 THEN SELECT 'B';
			WHEN score>=60 THEN SELECT 'C';
			ELSE SELECT 'D';
			END CASE:
END $

案例:根据传入的成绩,来返回级别,比如传入的成绩:90-100 返回A;80-90 返回B;60-80返回C;否则返回D'

CREATE FUNCTION test_if(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 $

循环结构

分类

WHILE
LOOP
REPEAT

循环控制:

ITERATE 类似于 CONTINUE ,继续,结束本次循环,继续下一次;
LEAVE 类似于 BREAK,跳出,结束当前所在的循环;

循环结构-WHILE

语法

[标签:]WHILE 循环条件 do
			循环体
END WHILE [标签];

循环结构-LOOP

语法

[标签:]LOOP
		循环体
END LOOP [标签];
---------------------
可以用来模拟简单的死循环

循环结构-REPEAT

语法

[标签:] REPEAT
		循环体;
UNTIL 循环结束条件
END REPEAT [标签];
------------------------------
至少执行一次

循环结构-案例

#1.案例:批量插入,根据次数为admin表插入多条记录

=1= 不添加循环控制语句
-----------------------------------------------------
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGIN
			DECLARE i INT DEFAULT 1;
			WHILE i<=insertCount DO
					INSERT INTO admin(username,'password') 
					VALUES(CONCAT('Rose',i),'666');
					SET i = i+1;
			END WHILE;
END $

=2= 添加循环控制语句
-------------------------------------------------------
CREATE PROCEDURE test_while1(IN insertCount INT)
BEGIN
			DECLARE i INT DEFAULT 1;
			a:WHILE i < insertCount DO
					INSERT INTO admin(username,'password') VALUES(CONCAT('lq',i),'0000');
					IF i >= 20 THEN LEAVE a;
					END IF
					SET i = i+1;
			END WHILE a;
END $

=3= 添加ITERATE语句
	要求只插入偶数次
	----------------------------------------------------
	CREATE PROCEDURE test_while1(IN insertCount INT)
	BEGIN
				DECLARE i INT DEFAULT 0;
				a:WHIEL i <=insertCount DO
						SET i = i+1;
						IF MOD(i,2)!=0 THEN ITERATE a;
						END IF;
						
						INSERT INTO admin(username,'password') VALUES(CONCAT('lq',i),'0000');
				END WHILE a;
	END $

循环结构-总结

在这里插入图片描述

流程控制经典案例

已知表stringcontent 其中字段:
			id 自增长
			content varchar(20)
要求:向该表插入指定个数的,随机的字符串
--------------------------------------------
CREATE TABLE stringcontent(
	id INT PRIMARY KEY AUTO_INCREMENT,
	content VARCHAR(20)
);
DELIMITER $
CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
BEGIN
			DECLARE i INT DEFAULT 1; //定义一个循环变量 i,表示插入次数
			DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
			DECLARE startIndex INT DEFAULT 1; //代表起始索引
			DECLARE len INT DEFAULT 1;//代表截取的字符的长度
			WHILE i<= insertCount DO
				SET len = FLOOR(RAND()*(20-startIndex+1)+1);//产生一个随机的整数,代表截取长度,1 -(20-startIndex+1)
				SET startIndex = FLOOR(RAND()*26+1);//产生一个随机的整数,代表起始索引 1-26
				INSERT INTO stringconeten(content) VALUES();
				SET i = i +1;//循环变量更新
			END WHILE;
END $
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值