7. mysql中的流程控制语句

一、三大结构

  • 顺序结构
  • 分支结构
  • 循环结构

二、分支结构

注意 所有的语句只有在DOS界面使用才有效

#1. if
SELECT IF(表达式1,表达式2,表达式3)
如果表达式1 = TRUE 则返回 表达式2,否则返回表达式3

#2. case
1. 类似switch结构
语法:
	CASE 变量|表达式|字段
	WHEN 要判断的值1 THEN 返回值1或语句1;
	WHEN 要判断的值2 THEN 返回值2或语句2;
	...
	ELSE 要返回的值n或语句
	END CASE;

2. 类似多重if结构
语法:
	CASE 
	WHEN 要判断的条件1 THEN 返回值1或语句1;
	WHEN 要判断的条件2 THEN 返回值2或语句2;
	...
	ELSE 要返回的值n
	END CASE;
	
特点:
可以嵌套使用
可以作为独立的语句但是必须在 BEGIN END 语句中才有效。

#案例 根据成绩显示等级
CREATE PROCEDURE test_case(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 $

CALL test_case(99)$

#3. if 结构
/*
功能: 实现多重分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
else 语句n;
end if;

只能用于 BEGIN END 中
*/
#案例1 	根据成绩返回等级
CREATE FUNCTION test_if(score INT) RETURNS CHAR
BEGIN
	IF score >=90 THEN RETURN 'A';
	ELSEIF score >=80 THEN RETURN 'B';
	ELSEIF score >=60 THEN RETURN 'C';
	ELSE RETURN 'D';
	END IF;
END $	
#调用
SELECT test_if(99)$

三、循环结构

注意 所有的语句只有在DOS界面使用才有效

/*
分类:
while loop repeat
*/
循环控制:
iterate 类似continue 结束本次循环继续下次循环
leave   类似break 退出循环
1. while
语法
【标签 :】while 循环条件 do
	循环体;
end while【标签】;
2. loop
语法
【标签 :loop
	循环体;
end loop【标签】;
3. repeat
语法
【标签 :】repeat
	循环体;
until 结束循环的条件
end repeat 【标签】;
#案例1 批量插入
DELIMITER $ #设置自定义结束标记
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGIN
	DECLARE i INT DEFAULT 1; #定义局部变量
	a:WHILE i <= insertCount DO
		INSERT INTO ADMIN(username,PASSWORD) VALUES('rose','666');
		SET i = i + 1;
	END WHILE a;
END $
#调用
CALL pro_while1(100) $

#删除存储过程
DROP PROCEDURE pro_while1 $

#案例2  批量插入如果次数大于20则退出
#DELIMITER $
CREATE PROCEDURE pro_while2(IN insertCount INT)
BEGIN
	DECLARE i INT DEFAULT 1; 
	a:WHILE i <= insertCount DO
		INSERT INTO ADMIN(username,PASSWORD) VALUES(CONCAT('rose',i),'666');
		IF i >= 20 THEN LEAVE a;
		END IF;
		SET i = i + 1;		
	END WHILE a;
END $
#调用
CALL pro_while2(100) $

#案例3 iterate语句 批量插入偶数次
DELIMITER $
CREATE PROCEDURE pro_while3(IN insertCount INT)
BEGIN
	DECLARE i INT DEFAULT 0; 
	a:WHILE i <= insertCount DO
		SET i = i + 1;
		IF MOD(i,2) != 0 THEN ITERATE a;
		END IF;
		INSERT INTO ADMIN(username,PASSWORD) VALUES(CONCAT('xiaohu',i),'666');			
	END WHILE a;
END $
#调用
CALL pro_while3(100) $
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAFEBABE 34

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值