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循环当条件为假时跳出,当条件为真时执行,基本流程如下:

img

​ 定义格式演示:

-- 创建存储过程
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循环条件为真时退出,条件为假时继续循环,执行过程如下:

img

​ 定义格式演示:

-- 创建存储过程

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循环中中可以进行类似breakcontinue的操作。

​ 定义格式演示:

-- 创建存储过程

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();
posted @ 2021-02-20 21:32  云崖君  阅读(45)  评论(0编辑  收藏  举报