流程控制

1、变量
#流程控制结构
/*
顺序
分支
循环
一、变量
二、分支
三、循环
*/

#一、变量
#1、用户变量
#声明并赋值语法:

SET @变量名=值;

SET @变量名:=值;

SELECT @变量名:=值;

#赋值:

方式一:

同上述三种

方式二:

SELECT 字段|常量|表达式 INTO 变量

【FROM 表】;

#使用语法:

SELECT @变量名;

#2、局部变量
#声明的语法:

DECLARE 变量名 类型 【DEFAULT 值】;

#赋值的语法:

方式一:

同上述三种

方式二:

SELECT 字段|常量|表达式 INTO 变量

【FROM 表】;

#使用语法:

SELECT 变量名;

#注意:用户变量和局部变量的区别

作用域 声明位置

用户变量 比较大 可以在BEGIN END 的外面也可以在里面

局部变量 只能在声明该变量的BEGIN END中 只能在BEGIN END 的里面

mysql > set @name:=’tom’
mysql>select beauty.name into @name from beauty where id = 1
mysql>select @name

mysql> delimiter $
mysql>create procedure var_prol()
->begin
->declare id int default 1;
->set id = 10
->select id;
->end $
mysql > call var_prol()

2、分支
#分支结构
#1、IF函数
#语法:
SELECT IF(10>3,‘哈哈’,‘嘎嘎’);

#应用在:BEGIN END 的里面和外面都行

#2、CASE END
#应用在:BEGIN END 的里面和外面都行
#案例:
CREATE PROCEDURE case_pro1(IN score FLOAT)
BEGIN
CASE
WHEN score>90 THEN SELECT ‘A’;
WHEN score>80 THEN SELECT ‘B’;
WHEN score>60 THEN SELECT ‘C’;
ELSE SELECT ‘D’;
END CASE;
END $

call casepro1(100)

#3、CASE END
#类似于switch
#案例:
CREATE PROCEDURE case_pro2(IN myweek INT)
BEGIN
CASE myweek
WHEN 1 THEN SELECT ‘干煸豆角’;
WHEN 2 THEN SELECT ‘糖拌西红柿’;
WHEN 3 THEN SELECT ‘红烧肉’;
ELSE SELECT ‘干煸土豆’;
END CASE;

END $

call case_pro2(1)
#应用在:BEGIN END 的里面和外面都行

#4、IF ELSEIF ELSE
#类似于多重IF
#语法:

IF 条件1 THEN 语句1;

ELSEIF 条件2 THEN 语句2;

ELSEIF 条件3 THEN 语句3;

ELSE 语句n;

END IF ;

#案例:
CREATE PROCEDURE if_pro1(IN score FLOAT)
BEGIN
IF score>90 THEN SELECT ‘A’;
ELSEIF score>80 THEN SELECT ‘B’;
ELSEIF score>60 THEN SELECT ‘C’;
ELSE SELECT ‘D’;
END IF;
END $
call if_pro1(67)
#应用在:只能应用在BEGIN END中

3、循环

#三、循环结构
#1、WHILE结构
#语法:

【标签:】WHILE 循环条件 DO

循环体;

END WHILE 【标签】;

#案例:
#没有使用标签
CREATE PROCEDURE loop_pro1(IN mycount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=mycount DO
SELECT i;
SET i=i+1;
END WHILE;
END $

    CALL lopp_pro1(10) $	

#使用标签
CREATE PROCEDURE loop_pro2(IN mycount INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	a:WHILE i<=mycount DO
		SELECT i;
		SET i=i+1;
	END WHILE a;
END $

 CALL lopp_pro2(10) $	

#使用标签+leave(break)
CREATE PROCEDURE loop_pro3(IN mycount INT,OUT result INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	DECLARE SUM INT DEFAULT 0;
	
	a:WHILE i<=mycount DO
		SET SUM = SUM+i;
		IF SUM>20 THEN LEAVE a;
		END IF;
		SET i=i+1;
		
	END WHILE a;
	SELECT SUM INTO result;
END $

CALL loop_pro3(10,@r) $
SELECT @r $

#2、REPEAT结构
#语法:

【标签:】REPEAT

循环体;

UNTIL 结束条件 END REPEAT 【标签】;

#案例:
#无标签
CREATE PROCEDURE loop_pro4(IN mycount INT)
BEGIN
DECLARE i INT DEFAULT 1;
REPEAT
SELECT i;
SET i=i+1;

	UNTIL i>mycount END REPEAT;
	
END $

CALL loop_pro4(4) $


#1.没有使用leave
CREATE PROCEDURE loop_pro5(IN mycount INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	a:REPEAT
		SELECT i;
		SET i=i+1;
	
	UNTIL i>mycount END REPEAT a;
	
END $

CALL loop_pro5(4) $

#2.使用leave
CREATE PROCEDURE loop_pro6(IN mycount INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	a:REPEAT
		SELECT i;
		IF i=2 THEN LEAVE a;
		END IF;
		SET i=i+1;
	
	UNTIL i>mycount END REPEAT a;
	
END $

CALL loop_pro6(10)

#while和repeat的对比

执行顺序 循环条件 语法不同

#WHILE 先判断后执行 循环成立的条件 WHILE关键字
#REPEAT 先执行后判断 循环结束的条件 REPEAT关键字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值