关于MYSQ流程控制结构的学习

MYSQ流程控制结构的学习

目录

  1. 分支结构
    1.1 if 函数
    1.2 case结构
    1.3 if结构
  2. 循环结构
    2.1 没有添加循环控制条件
    2.2 添加leave语句
    2.3 添加iterate语句

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

一、分支结构

1、if函数
**功能:**实现简单的双分支
语法:

select if(表达式1,表达式2,表达式3)

执行顺序:
如果表达式1成立,则if 函数返回表达式2的值,否则返回表达式3的值
应用场景: 任何地方

2、 case结构
情况1: 类似于java中的switch语句,一般用于实现等值判断
语法:

case 变量|表达式|字段
when 要判断的值 then 返回的值1或语句1;
when 要判断的值 then 返回的值2或语句2;
…
eles 要返回的值n或语句n;
end case;

情况2:类似于java中的多重if语句,一般用于实现区间判断
语法

case 
when 要判断的条件1 then 返回的值1或语句1;
when 要判断的条件2 then 返回的值2或语句2;
…
eles 要返回的值n或语句n;
end case;

特点:
1、可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end中或begin end的外面
2、可以作为独立的语句去使用,只能放在begin end中
3、如果when中的值或条件成立,则执行对应的then后面的语句,并且结束case
如果都不满足,则执行else中的语句或值
4、else可以省略,如果else省略了,并且所有when条件都不满足,则返回null

案例:创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩90-100,显示A,80-90,显示B,60-80,显示C,否则,显示D

create procedure sorce(in num int)
begin
case 
when num between 90 and 100 then select 'A';
when num between 80 and 90 then select 'B';
when num between 60 and 80 then select 'C';
else select 'D';
end case;
end $
#调用
call sorce(95)$

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 function test6(num int) returns varchar(10)
begin
if num between 90 and 100 then return 'A';
elseif num between 80 and 90 then return 'B';
elseif num between 60 and 80 then return 'C';
else return 'D';
end if;
end$
#调用
select test6(85)$

二、循环结构

分类:
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、没有添加循环控制条件
案例:批量插入,根据次数插入到admin表中多条记录

create procedure pro_while(in insertCount int)
begin
     declare i int default 1;
     a:while i<=insertCount do
      insert into admin(username,password) values(concat('liMing',i),'345');
set i=i+1;
end while a;
end$
#调用
call pro_while(100)$

2、添加leave语句
案例:批量插入,根据次数插入到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('xijun',i),'1235');
    if i>=20 then leave a;  #跳出循环
    end if;
    set i=i+1;
    end while a;
end $
#调用
call test_while(100)$

3、添加iterate语句
案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次

create procedure test_while1(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('xijun',i),'1235');
    end while a;
end $
#调用
call test_while(100)$

Java中:

int i=0;
while(i<=insertCount){
      i++;
      if(i%2==0){
      continue;
} 
插入
}

案例:已知表stringcontent,其中字段:
id 自增长
content varchar(20)

向该表插入指定个数的,随机的字符串

#创建stringcontent表
create table stringcontent(
           id int primary key auto_increment,
           content varchar(20)
);
#创建test_range1函数
create procedure test_range1(in insertCount int)
begin
   declare i int default 1; #定义一个循环变量i,表示插入次数
   declare str varchar(26) default "abcdefghijklmnopqrstuvwxwyz";
 declare startIndex int default 1;#代表一个起始索引
 declare len int default 1;#代表截取的字符的长度
while i<=insertCount do
#产生一个随机的整数,代表截取长度1-(26-startindex+1)
set len=floor(rand*(20-startIndex+1)+1);
#产生一个随机的整数,代表起始索引1-26
set startIndex=floor(rand()*26+1);
   insert into stringcontent(content) values(substr(str,startIndex,len));
   set i=i+1;#循环变量更新
   end while;
end$

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
IFNULL函数在MySQL中的作用是用于判断一个值是否为NULL,如果是NULL,则返回指定的替代值,否则返回原始值。当IFNULL函数的第一个参数为NULL时,它会返回第二个参数的值。例如,SELECT IFNULL(NULL, 0)会返回0,因为NULL被替换为0。IFNULL函数在使用上下文中可以根据需要返回字符串或数字,但如果要基于TRUE或FALSE条件返回值,应该使用IF函数而不是IFNULL函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySql中的IFNULL、NULLIF和ISNULL用法详解](https://download.csdn.net/download/weixin_38737283/13701068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [mysql函数IFNULL使用的注意事项(必看!!)](https://blog.csdn.net/FU250/article/details/79989410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [MySQL ifnull()函数](https://blog.csdn.net/wang121213145/article/details/125204990)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值