MYSQL -- 流程控制

这篇博客详细介绍了MYSQL的流程控制结构,包括顺序结构、选择结构(如if...else和case...when)以及循环结构(while、loop、repeat)。还讨论了数据库变量的类型,如局部变量、用户变量、会话变量和全局变量的定义与使用。最后,文章提到了如何在循环中跳出,如leave和iterate的用法。
摘要由CSDN通过智能技术生成

MYSQL流程控制

一、流程控制结构

1、顺序结构

SQL代码是从上到下、从左至右依次执行

begin…end;相当于{ }。

delimiter // 重定义结束符。 相当于#define

可以嵌套,但必须成套使用,

注意:嵌套内定义的数据,在外层是不可以使用的。

2、选择结构

  1. if() … else()…;

  2. case <语句>

    when <条件1>;

    when< 条件2>;

    end case;

3、循环结构

for()\while()\do…while();

二、数据库变量

1、局部变量

  1. 声明定义关键字:declare

  2. 设置初始值关键字:default

  3. 基本格式:declare <变量名> 数据类型 [default 初始值]

    例如:declare a int default 0;-- 定义一个变量a为0.

    注意:局部变量只能在{}内使用。

  4. 局部变量的赋值

    set a=10 ;

2、用户变量

  1. 生命周期:当前连接.

  2. 作用域:其定义的复合语句中,只能在begin…end中使用。

  3. 用户变量的定义和使用:

    set @a = 10;(直接使用,不用定义)。

    select @a;-- 相当于打印输出语句。明确作用是查询数据

  4. 用户变量是一个弱类型的变量,万用类型,可以给他赋值任何类型的数据。

3、 会话变量

​ 系统自带的,不能自定义,不能随意改动,是用来保存数据库当前会话的默认数据(字符集,存储引擎),当前连接有效,重新连接会恢复默认值,一般格式:@@会话变量名

查看会话变量: show session variables;

4、全局变量

​ 系统自带的,是用来保存数据库当前服务的默认数据,当前服务有效,重启服务后恢复默认值,一般格式:@@全局变量名

查看全局变量:show global variables;

三、选择结构

1、if…else分支选择结构

  1. if语句的基本格式

    if<判断条件> then<语句>end if;

-- 判断两个数的最大值
delimiter //
create procedure maxs(in x int,y int)
begin
if(x>y) then select x;
elseif x=y then select x;
else select y;
end if;
end //
delimiter ;

2、case…when 多分枝结构

-- 对成绩评定等级,成绩满分为100,对给定的成绩平等级ABCDE
delimiter //
create procedure scores(in score float)
begin 
if score >100||score < 0 then select "成绩输入错误";
else 
	case score div 10 -- 默认结果是浮点数,需要取整floor
		-- select 123 div 10;-- div 是整除。
		when 10	then select '优秀' as '评分';
		when 9 then select '优秀'as'评分';
		when 8 then select '良好'as'评分';
		when 7 then select '及格'as'评分';
		when 6 then select '及格'as'评分';
		else select '不及格'as'评分';
	end case;
end if;
end//
delimiter ;

四、循环结构

1、while…do循环结构

while循环基本格式:

while<条件表达式>

do<循环体语句>

end while;

-- 求整数1-100 的和
delimiter //
create procedure test(out sum1 int)
begin
declare i int default 1;
declare s int default 0;
while i<=100
do 
set s=s+i;
set i=i+1;
end while;
set sum = s;
end//
delimiter;

2、 loop 循环结构

  1. loop的基本格式:

    loop<循环体语句>

    end loop;

  2. loop本质上是一个无线循环,是一个死循环,不自带循环条件,需要在循环中加判断条件。

-- 求整数1-n的和
create procedure test(in n int ,out s int)
delimiter //
begin
declare sum int default 0;
declare i int default 1;
	L:loop -- 给循环取个别名L。
		set sum = sum+i;
		set	i = i+1;
		if i>n then leave L; -- 相当于break语句。
		end if;
	end loop;
set s = sum;
end//
delimiter ;
set @n = 10;
call test(@n,20,@su);
select @su;

3、repeat 循环结构

  1. 基本格式:

    repert<循环体语句>;

    until <条件表达式>;-- 结束条件。

    end repeat;

  2. 注意repeat语句相当于C语言中的do while 语句,都是先执行一次循环体在进行条件判断,但是不同的是,do while 循环是条件不满足时跳出循环体,而repeat是直到满足条件时跳出循环体。

-- 求n到m的和
delimiter //
create procedure test(inout n int ,m int,s int)
begin
repeat 
set s = s+n;
set n = n+1;
until n>m;
end repeat;
end//

4、跳出循环

  1. leave 跳出整个循环,相当于C语言中的break。

  2. iterate 跳出并结束本次循环,进入下次循环,相当于C语言中的continue。

    注意:iterate只能在循环中使用。

    以上所说的流程控制时相对于存储过程而言的,流程控制大多数是用于配合存储过程的,因为自定义函数在数据库中使用比较少,大多数都是使用存储过程。

以上仅是我在【六星教育】的学习笔记,仅供参考。如有任何错误,敬请指正。欢迎大家的评价与点评。谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值