mysql 流程控制结构

1.流程控制结构分类
a.顺序结构 程序自上而下执行代码
b.分支结构 程序有至少两条路径,从中选择一条路径执行
c.循环结构 程序在满足一定条件的基础上,循环执行

2.if函数
if(表达式1,1为true执行表达式2,1为false执行表达式3)

3.case结构

a.类似java中switch语句,等值判断

case 变量/字段/表达式
when 判断的条件  then 返回值
when 判断的条件  then 返回值
...
else 返回值
end;
case 变量/字段/表达式
when 判断的条件  then 语句;
when 判断的条件  then 语句;
...
else 语句;
end case;

b.类似java中多重if语句,区间判断

case
when 判断条件 then 返回值
when 判断条件 then 返回值
...
else 返回值
end;
case
when 判断条件 then 语句
when 判断条件 then 语句
...
else 语句
end case;

注意:
case作为表达式,嵌套在其他语句中使用,可在任何位置;作为独立的语句,必须在 begin end中

例:

/*创建存储过程,给成绩分区间*/
delimiter $
create procedure  grade_p (in score tinyint)
begin
    /*case作为独立的语句*/
    case
    when score<=100 && score>=90 then select 'A';
    when score>=70 then select 'B';
    else select 'c';
    end case ;
end $

call grade_p(79)$

4.if结构

if结构实现多重分支
语法

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

在begin end中,即存储过程 函数中使用

/*给成绩划分等级,返回*/
delimiter $
create function grade_f(score tinyint) returns char(1)
begin
    if score>90 && score<=100 then return 'a';
    elseif score>=70 then return 'b';
    else return 'c';
    end if;
end $
select grade_f(70) $

5.循环

分类:
while loop repeat
循环控制
iterate 类似于continue 结束本次循环,继续下一次循环
leave 类似于break 跳出循环

a. while

[标签:]  while 循环条件 do 循环体;
end while [标签];

可能执行0次

b. loop

[标签:]  loop  循环体;
end loop [标签];

模拟死循环

c.repeat

[标签:]  repeat 循环体;
until 循环结束条件
end repeat  [标签];

至少执行一次

例:

delimiter $
create procedure insert_p (in time int )
begin
    declare temp int default 1;
   m: while temp<=time do
    insert into major (id, majorName) values (temp,'fgh');
    set temp=temp+1;
    end while m ;
end $

call insert_p(100)$

添加leave

delimiter $
create procedure insert_p (in time int )
begin
    declare temp int default 1;
   m: while temp<=time do
    insert into major (id, majorName) values (temp,'fgh');
    set temp=temp+1;
    if temp>=20 then leave  m;
    end if;
    end while m ;
end $

call insert_p(100)$

跳过偶数执行

delimiter $
create procedure insert_p (in time int )
begin
    declare temp int default 0;
   m: while temp<time do
           set temp=temp+1;
           if mod (temp,2)=0 then iterate  m;
           end if;
    insert into major (id, majorName) values (temp,'fgh');


    end while m ;
end $

call insert_p(100)$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

但行益事莫问前程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值