MYSQL必备控制流程

   日期:2020-07-05     浏览:94    评论:0    
核心提示:文章目录流程控制的概念顺序结构变量赋值选择结构循环结构总结流程控制的概念数据库中的流程控制也就相当于C语言中的流程控制语句,其中有又分为顺>序结构、选择结构和循环结构三种分支结构。顺序结构选择结构循环结构通常这些结构都与存储过程和函数配合使用顺序结构从上往下顺序执行代码begin end 语句相当于C语言中的括号 {}。C语言中的{}可以嵌套,如{ { } },begin end也是可以嵌套的每一个begin end 相当于一个语句块,用select 语句可以充当打印语句

文章目录

  • 流程控制的概念
  • 顺序结构
  • 变量赋值
  • 选择结构
  • 循环结构
  • 总结

流程控制的概念

数据库中的流程控制也就相当于C语言中的流程控制语句,其中有又分为顺>序结构、选择结构和循环结构三种分支结构。
顺序结构
选择结构
循环结构
通常这些结构都与存储过程和函数配合使用

顺序结构

从上往下顺序执行代码

begin end 语句

相当于C语言中的括号 {}。C语言中的{}可以嵌套,如{ { } },begin end也是可以嵌套的
每一个begin end 相当于一个语句块,用select 语句可以充当打印语句
定义变量 declare 变量名 类型 默认值
定义局部变量 set @变量名=表达式
使用 select 进行查询替代打印语句
例:

begin
    declare x int;      ## 定义了一个int类型的变量
    set x = 10;         #给变量x设置值为10
    #语句块的嵌套
    begin
        declare y int;
        set y = x;
        select x;
    end
    select x;
    select y;  #select y; 这里可以使用变量y么?
end

变量赋值

定义一个变量
SET语句
定义用户变量,

#定义局部会话变量
set @变量名               #只对当前用户使用的客户端生效##定义一个全局变量
set global @@变量名       #对所有客户端生效,服务器重启后失效#变量名赋值操作,类型会被自动的进行识别
set 变量名=数据           #修改变量名的数据

declare语句
专门用于定义局部变量

declare 变量名 类型名

select into
使用select into语句为变量赋值

select 列字段名 into 变量名

选择结构

if分支结构
if语句
基本格式:
if 判断条件 then 语句;
end if(注意结束需要用end if)

#分支语句
if (表达式)  then
    ##执行语句
    ##执行语句2
    ##执行语句。。。
end if;

if else语句
基本格式:

if 判断条件 then 
    #语句1;
else 
    #语句2;
end if;

if else嵌套
if语句之后的判断条件可以用()改变条件的优先级。
多重条件语句
基本格式:

 if 判断条件1 then 
    ## 语句1;
 elseif 判断条件2 then 
    ## 语句2;
 else
    ## 语句3
 end if;

例如:

delimiter $$
​
create procedure test1(in x int)
begin
    if x>100 then 
        select '大于100';
    elseif 100=x then 
        select '等于100';
    else 
        select '小于100';
    end if;
end;
call test1();
delimiter ;

条件语句case
MySQL中的条件语句相当于C语言中的switch case语句。
基本格式:

case 条件值 
    when1 then 语句1;
    when2 then 语句2;
    #...
    when 值n then 语句n;
    else 语句n+1;
end case;

使用例子

##开关语句
##score int 
case score
    when 10 then select 'A';
    when 20 then select 'B';
    when 30 then select 'C';
    else select 'D';
end case;

例如:对成绩进行评分

create procedure test2(in score int)
begin
    case score/10
        when 10
        when 9 then select '优秀';
        when 8 then select '良好';
        when 7
        when 6 then select '及格';
        else select '不及格';
    end case;
end;

循环结构

在C语言中有三种循环结构:for、while和do while。
那么在MySQL语言中也有相应的语句。
while循环语句
基本格式:

#while循环
while 条件表达式 do
    #循环体语句;
end while;

数据库中的while循环和C语言中的while几乎一样
例如:求数字1到10的和

create procedure test3(out sum int)
begin
    declare i int default 1;
    declare s int default 0;
    while i<=10 do
        set s = s+i;
        set i = i+1;
    end while;
    set sum = s;
end;call test3(@s);
select @s;

loop循环
基本格式:

#loop循环
标识符: loop
#代码块
end loop;

注意:这里的loop循环是一个无限循环,其没有结束条件,所以需要手动添加结束条件。
给loop循环添加结束条件

#有结束条件的循环
标识符: loop 
    #循环体语句;
    if 条件表达式 then
        leave 标识符;      #跳出循环
    end if;
end loop;

这里给循环取别名,通过if语句判断结束条件,leave离开跳出循环(相当于C语言中的break)。
例如:求数字1到n之和

create procedure test4(out sum int,in n int)
begin
    declare s int default 0;
    declare i int default 1;
    sum:loop
        set s=s+i;      
        set i=i+1;
        if i>n then leave sum;
        end if;
    end loop;
    set sum = s;
end;

repeat循环
repeat循环是条件表达式为真时才跳出循环
基本格式

repeat 
循环体语句;
#执行语句块
until 条件表达式
end repeat;

注意:repeat循环相当于C语言中的do while循环,都是先执行一次循环体再进行条件判断,但是不同的是,do while循环是条件不满足时才结束循环,而repeat是条件满足时才结束循环。并且until语句后不能有';'分号.
例如:求数字n到m之和

create procedure test5(out sum int,in n int,in m int)
begin
    declare i int default n;
    declare j int default n+1;
    repeat  set i = i+j;    set j = j+1;
    until j>m
    end repeat;
set sum = i;
end;
call test5(@s,5,10);
select @s;

跳出循环
leave 语句
跳出并结束整个循环,相当于C语言中的break语句。
iterate
跳出并结束当本次循环,进入下次循环,相当于C语言中的continue。
注意:iterate只能在循环中使用。
在mysql语句中的跳出语句,都需要在循环语句中,写上跳出的标识符
注意:以上所说的流程控制是相对于存储过程而言的,流程控制大多是用于配合存储过程的,因为自定义函数在数据库中使用比较少,大多数都是使用存储过程。
havaing语句
变量是无法直接用where进行条件判断,例如用function返回的数据起上一个别名以后

select fn(t_id) as a from [table] having a=12;

总结

流程语句的过程
变量的定义和赋值操作
用select充当打印语句
顺序结构,选择结构,循环语句
存储过程定义语句
函数定义数据算法

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服