MYSQL中的流程控制语句

一、条件语句
(1) IF条件语句

语法:
IF search_condition THEN
    statement_list
ELSE
    statement_list
END IF;

例:比较两个数大小
DELIMITER//
CREATE PROCEDURE test_procedure(i int,j int)
BEGIN
 DECLARE s varchar(16);
 IF i<j THEN
    set s='i<j';
 elseif i>j then
   set s='i>j';
 else
  set s='i=j';
 END IF;
SELECT s;
END
//
DELIMITER;

调用:call test_procedure(3,6);

(2)CASE语句

语法:
CASE case_value
    WHEN when_value THEN
        statement_list
    ELSE
        statement_list
END CASE;

例:比较两个数大小
DELIMITER//
CREATE PROCEDURE test_procedure(i int,j int)
BEGIN
 DECLARE s varchar(16);
 case when i-j<0 then
    set s='i<j';
 when i-j>0 then
   set s='i>j';
 else
  set s='i=j';
 end case;
SELECT s;
END
//
DELIMITER;

调用:call test_procedure(3,6);

二、循环语句
(1)LOOP循环

语法:
label: LOOP
    statement_list

    IF exit_condition THEN
        LEAVE label; 
    END IF; 
END LOOP label;

例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
 DECLARE s int;
 DECLARE i int;
 set s=0,i=1;
 loop_label:LOOP 
 IF i<=n THEN
    set s=s+i;
    set i=i+1;
ELSE
 LEAVE loop_label;
 END IF;
 END LOOP;
SELECT s;
END
//
DELIMITER;

调用:call test_procedure(5);

(2)WHILE循环,满足条件时执行循环体(先检查条件是否满足再进行操作)

语法:
WHILE search_condition DO
    statement_list
END WHILE;

例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
    DECLARE s int;
    DECLARE i int;
    set s=0,i=1;
    WHILE i<=n DO
        set s=s+i;
        set i=i+1;
    END WHILE;
    SELECT s;
END
//
DELIMITER;

调用:call test_procedure(5);

(3)REPEAT循坏,满足条件时跳出循环(执行操作后检查条件是否满足)

语法:
REPEAT
    statement_list
UNTIL search_condition 
END REPEAT;

例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
 DECLARE s int;
 DECLARE i int;
 set s=0,i=1;
 REPEAT 
    set s=s+i;
    set i=i+1;
 UNTIL i>n
 END REPEAT;
SELECT s;
END
//
DELIMITER;

调用:call test_procedure(5);

(4)ITERATE迭代:通过引用复合语句的标号,来从新开始复合语句

例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
 DECLARE s int DEFAULT 0;
 DECLARE i int DEFAULT 1;
 lables_loop:LOOP
 set s=s+i;
 set i=i+1;
 IF i<=n then
 iterate lables_loop;
 end if;
 if i>n then
 leave lables_loop;
 end if;
 END LOOP;
SELECT s;
END
//
DELIMITER;

调用:call test_procedure(5);

注:MySQL的LOOP, LEAVE 和ITERATE语句(类似Continue、Break的写法)
和REPEAT和while语句不同,LOOP、LEAVE、ITERATE更像其他编程语言中的goto语句。
LOOP要设定一个label指定循环的开始位置,而LEAVE则像其他语言中的Break会离开LOOP指定的块,
iterate则像其他语言中的Continue会再次回到LOOP开始的语句。


(5)lables标签:可以用在begin、repeat、while或loop语句前,语句标号只能在合法的语句前使用,可以跳出循环,使运行指令达到复合语句的最后一步

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值