DBA MySQL分支循环
分支结构
基本使用
在MySQL
中除了可以使用控制流函数(参见函数相关章节)之外,也可以使用IF/ESLE
进行控制。
但是IF/ELSE
只能够用于BEGIN…END
中,这意味只能在触发器、存储过程、自定义函数中使用。
基本格式如下:
-- 创建存储过程
delimiter $
CREATE PROCEDURE proc_if(in age int)
BEGIN
IF age > 60 THEN
SELECT "老年人";
ELSEIF age > 30 THEN
SELECT "中年人";
ELSEIF age > 18 THEN
SELECT "成年人";
ELSE
SELECT "未成年";
END IF;
END $
delimiter ;
-- 调用存储过程
call proc_if(23);
流程控制
WHILE
WHILE
循环当条件为假时跳出,当条件为真时执行,基本流程如下:
定义格式演示:
-- 创建存储过程
delimiter $
CREATE PROCEDURE proc_while()
BEGIN
-- 声明变量
DECLARE num INT ;
SET num = 0 ;
-- 开始循环
WHILE num < 10 DO
SELECT num;
SET num = num + 1 ;
END WHILE ;
END $
delimiter ;
-- 调用存储过程
call proc_while();
REPEAT
REPEAT
循环条件为真时退出,条件为假时继续循环,执行过程如下:
定义格式演示:
-- 创建存储过程
delimiter $
CREATE PROCEDURE proc_repeat()
BEGIN
-- 声明变量
DECLARE i INT ;
SET i = 0 ;
REPEAT
SELECT i;
set i = i + 1;
-- UNTIL:结束循环的条件,不需要分号
UNTIL i >= 5
END REPEAT;
END $
delimiter ;
-- 调用存储过程
call proc_repeat();
LOOP
LOOP
循环中中可以进行类似break
和continue
的操作。
定义格式演示:
-- 创建存储过程
delimiter $
CREATE PROCEDURE proc_loop()
BEGIN
-- 声明变量
DECLARE i INT DEFAULT 0;
-- 标签名为loop的循环体开始
LOOP_LABEL: loop
set i=i+1;
IF i=5 THEN
-- ITERATE:类似于continue
ITERATE loop_label;
END IF;
IF i>10 THEN
-- LEAVE: 类似于break
LEAVE loop_label;
END IF;
SELECT i;
END loop;
-- 结束loop的循环体
END$
delimiter ;
-- 调用存储过程
call proc_loop();