MySQL——流程控制结构

分支结构

if函数

可以实现简单的双分支
语法:if(expr1,expr2,expr3)
执行顺序:expr1成立则返回expr2的值,反之返回expr3的值

case结构

两种情况:

  • 类似于switch,一般用于实现等值判断
    语法:
case 变量|表达式|字段
when 判断的值 then 返回的值1或语句1
when 判断的值 then 返回的值2或语句2
...
else 返回的值n或语句n
end;
  • 类似于多重if,用于实现区间判断
    语法:
case
when 判断的条件1 then 返回的值1或语句1
when 判断的条件2 then 返回的值2或语句2
...
else 返回的值n或语句n
end;

注意:如果是语句要在结尾加上分号

特点:

  • 可以作为表达式嵌套在其它语句中,可以放在任何地方,begin end中或外
  • 可以作为独立语句,只能放在begin end中
  • 若else省略,且所有条件均不满足,则返回NULL

if结构

实现多重分支
语法:

if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
else 语句n;
end if;

应用场景:只能用在begin end中

循环结构

三种循环结构都只能用在begin end中

循环控制

  1. iterate:类似于continue,继续,结束本次循环,继续下一次
  2. leave:类似于break,跳出,结束当前所在循环

while

语法:

【标签:】 while 循环条件 do
	循环体
end while 【标签】;

注:

  • 标签就类似于循环起名字,可以不加,如果要加循环控制语句,就要加上标签

loop

语法:

【标签:】 loop
	循环体
end loop 【标签】;
  • 可以用来模拟简单的死循环

repeat

语法:

【标签:】 repeat
	循环体
until 结束循环的条件
end repeat 【标签】;

例子

  1. 批量插入,根据次数插入到admin表中多条记录,次数大于20则停止(要使用循环控制)
CREATE PROCEDURE test_while(IN insertCount INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	a:WHILE i<=insertCount DO
		INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'00000');
		IF i>=20 THEN LEAVE a;
		END IF;
		SET i=i+1;
	END WHILE a;
END $
  1. 已知表stringcontent 其中字段:
    id 自增长
    content varchar(20)
    向该表插入指定个数的,随机的字符串
CREATE PROCEDURE insert_char(IN num INT)
BEGIN
	DECLARE i INT DEFAULT 1; #定义循环变量i
	DECLARE str VARCHAR(26) DEFAULT 'abcdefghijkmlnopqrstuvwxyz'; #定义一个字符串用于生成随机字符串
	DECLARE startindex INT DEFAULT 1;#起始索引
	DECLARE len INT DEFAULT 1;#截取长度
	REPEAT 
	SET len=FLOOR(RAND()*20-startindex+1)+1);#产生随机整数代表截取长度1-(26-startindex+1)
	SET startindex=FLOOR(RAND()*26+1);#产生随机整数代表起始索引1-26
	INSERT INTO stringcontent(content)
	VALUES(SUBSTR(str,startindex,len));
	UNTIL i=num;
	SET i=i+1;
END REPEAT $
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值