mysql8学习笔记19--流程控制语句

• MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的流程控制语句,另外return语句也是函数中的特定流程控制语句   流程控制case语句 • Case语句在存储过程或函数中表明了复杂的条件选择语句 mysql8学习笔记19--流程控制语句

 • 第一个语句中case_value与后面各句的when_value依次做相等的对比,如果碰到相等的,则执行对应的后面的statement_list,否则接着对比,

如果都没有匹配,则执行else后面的statement_list • 第二个语句中当search_condition满足true/1的结果时,则执行对应的statement_list,否则执行else对应的statement_list • Statement_list可以包含一个或多个SQL语句  
SELECT
    *, (
        CASE stusex
        WHEN 0 THEN
            'boy'
        WHEN 1 THEN
            'girl'
        ELSE
            'bu nan bu nv'
        END
    ) '性别'
FROM
    tb_student;

mysql8学习笔记19--流程控制语句

也能写成这个例子

SELECT
    *, (
        CASE 
        WHEN stusex=0 THEN
            'boy'
        WHEN stusex=1 THEN
            'girl'
        ELSE
            'bu nan bu nv'
        END 
    ) '性别'
FROM
    tb_student;

在存储过程中使用

drop PROCEDURE if EXISTS student2 ;
delimiter //
create PROCEDURE student2 (OUT ret VARCHAR(15),IN stuid_num int)
BEGIN
    DECLARE V int;
    set V=stuid_num;
    case 
    when v <= 1099 then update tb_student2 set `comment`='三年级学生'  where stuid=v;select '三年级学生' into ret;
    when  v > 1099 && v < 2099 then update tb_student2 set `comment`='二年级学生' where stuid=v;set @ret = '二年级学生';
    else update tb_student2 set `comment`='一年级学生' where stuid=v;select '一年级学生' into ret;
    end CASE;
END;
//
delimiter ;
call student2(@ret,1378);
select @ret;

mysql8学习笔记19--流程控制语句

 

 

流程控制IF语句 • IF语句在存储过程或函数中表明了基础的条件选择语句 mysql8学习笔记19--流程控制语句

• IF语句中如果search_condition满足true/1的条件,则执行对应的statement_list,否则再判断elseif中的search_condition是否满足true/1的条件,如果都不满足则执行else中的statement_list语句

• Statement_list中可以包含一个或多个SQL语句  
DROP FUNCTION
IF EXISTS compare_20;
delimiter //


CREATE FUNCTION compare_20 (n INT, m INT) RETURNS VARCHAR (30)
BEGIN

DECLARE s VARCHAR (20) ;
IF n > m THEN

SET s = '>' ;
ELSEIF n = m THEN

SET s = '=' ;
ELSE

SET s = '<' ;
END
IF ;
SET s = concat(n, ' ', s, ' ', m) ; RETURN s ;
END//
delimiter ;
mysql> select compare_20(3,4);
+-----------------+
| compare_20(3,4) |
+-----------------+
| 3 < 4           |
+-----------------+
1 row in set, 2 warnings (0.01 sec)

mysql> 

 

流程控制iterate语句 • Iterate语句仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环 mysql8学习笔记19--流程控制语句

• Label表示自定义的标签名

  流程控制leave语句 • Leave语句表明退出指定标签的流程控制语句块 • 通常会用在begin…end,以及loop,repeat,while的循环语句中 mysql8学习笔记19--流程控制语句

• Label表明要退出的标签名

  流程控制loop语句 • Loop语句是存储过程或函数中表达循环执行的一种方式  mysql8学习笔记19--流程控制语句

• 其中的statement_list可以包含一个或多个SQL语句

 

DELIMITER //
DROP PROCEDURE
IF EXISTS test ; CREATE PROCEDURE test ()
BEGIN

DECLARE i INT ;
SET i = 0 ; lp :  #lp为循环体名,可随意 loop为关键字
LOOP
    INSERT INTO test (sno, text, putsff)# 往test表添加数据
VALUES
    (i + 12, 'test', 20) ;
SET i = i + 1 ;# 循环一次,i加一
IF i > 10 THEN# 结束循环的条件: 当i大于10时跳出loop循环
    LEAVE lp ;
END
IF ;
END
LOOP
    ; SELECT
        *
    FROM
        test ;
    END
//
CALL test();
DELIMITER ;

 

流程控制repeat语句 • repeat语句是存储过程或函数中表达循环执行的一种方式 mysql8学习笔记19--流程控制语句 • Repeat语句中statement_list一直重复执行直到search_condition条件满足 • Statement_list可以包含一个或多个SQL语句  
DROP FUNCTION
IF EXISTS fun_test;
delimiter //


CREATE FUNCTION fun_test (p INT) RETURNS INT
BEGIN
DECLARE x int;
SET x = 100 ;
REPEAT

SET p = p + 1 ; UNTIL p > x
END
REPEAT
    ; RETURN p ;
END//
delimiter ;
mysql> select fun_test(10);
+--------------+
| fun_test(10) |
+--------------+
|          101 |
+--------------+
1 row in set (0.00 sec)

mysql> 

 

流程控制while语句 • while语句是存储过程或函数中表达循环执行的一种方式 mysql8学习笔记19--流程控制语句 • 当search_condition返回为true时,则循环执行statement_list中的语句,直到search_condition的结果返回为false • Statement_list中可以包含一个或多个SQL语句   流程控制return语句 • Return语句用在函数中,用来终结函数的执行并将指定值返回给调用者 mysql8学习笔记19--流程控制语句

• 在函数中必须要有至少一个return语句,当有多个return语句时则表明函数有多种退出的方式

 

 

 

上一篇:MySQL8安装教程及问题解决


下一篇:mysql8学习笔记20--流程控制语句(二)游标