MySQL--存储过程、局部变量与用户变量[@](初步认识)

MySQL--存储过程、局部变量与用户变量[@](初步认识)

      • 1、什么是存储过程
        • 1.1存储过程的定义与作用
        • 1.1存储过程的创建与调用
      • 2、局部变量与用户变量
        • 2.1 局部变量
        • 2.2 用户变量
      • 3、题目部分
      • 4、文末彩蛋--轻松一刻

      更多关于数据库知识请加关注哟~~。若需联系博主请私信或者加博主联系方式:
      QQ:3327908431
      微信:ZDSL1542334210

        前言:存储过程,一个神奇的方法,学MySQL不学存储过程是不完整的,那么它究竟神奇在哪儿?今日说法博主带你走进揭秘存储过程…咳咳…我承认我有装*了。说明一点博主是将其理解为自编函数!请跟着我的脚步慢慢来~~

1、什么是存储过程

1.1存储过程的定义与作用

        存储过程是一条或者多条SQL语句的集合,存储过程可以帮助我们:1、简化操作,减少冗余的操作步骤;2、 减少操作过程中的失误,提高工作效率。所以存储过程非常有用,应该尽可能学会和使用它。博主自己理解为是一种自编函数,但是与自变函数又不同的是它可以直接保存在MySQL里面以便直接使用,而自编函数得运行或者封装后方可调用。

1.1存储过程的创建与调用
delimiter //  #  实现两个整数相加的存储过程
create procedure test(in a int, in b int)  #创建存储过程
begin
   <你想要实现的SQL功能语句>
end //
delimiter ;
call test(2, 3); # 调用存储过程   

        解释:‘delimiter//’ 是将MySQL的结束符设置为’//’。因为MySQL默认的语句结束符号为’;’,为了避免与存储过程中SQL语句结束符相冲突,需要使用’delimiter’改变存储过程的结束符,并以’end//'结束存储过程。存储过程定义完毕之后在使用’delimiter;'恢复默认结束符。
        创建存储过程:create procedure <存储过程名称> (in a int, in b int) # 输入参数a和b,且指定为整型在begin…end里面写入你的代码功能语句。‘call ’调用刚刚写的存储过程。当然,如果不需要该存储过程删除就可以了drop procedure <你创建存储过程的名称>.你创建的存储过程在你当前的数据库下的Stored Procedures里面:
MySQL--存储过程、局部变量与用户变量[@](初步认识)_第1张图片

2、局部变量与用户变量

2.1 局部变量

        是一种变量赋值的方法,但是它只能在子程序中声明并使用,也就是在begin…end代码块中,也即在你们想要实现的SQL功能语句中。其变量的赋值为(记得只能在begin…end里面使用,脱离口没法使用):

a. 使用set语句为变量赋值:
declare test int;  # 介入一个赋值变量test
set test = 1 + 2# 对该变量进行传值
b. 使用selectinto为变量赋值:
declare test int# 介入一个赋值变量test
select 1 + 2 into test; # 对该变量进行传值
2.2 用户变量

        也是一种变量赋值的方法,用户变量与链接有关,一个客户端定义的变量不能被其他客户端看到或使用,该变量也是我们常用的。当客户端退出时,该客户端连接的所有变量将自动释放。具体的说就是一个被赋值的变量,它不受begin…end的代码块限制,介入方法形式与局部变量不同,它是“@var_name”形式,不需要用declare定义。赋值为:

a. 使用SET语句为变量赋值:
set @test = 1 + 2;
select @test;
b. 使用selectinto为变量赋值:
select 1 + 2 into @testselect @test;

        讲完理论知识,不来点题目冲刷一下,哪里找得到泥土里面埋藏的珍珠?

3、题目部分

题目一:请写出一个和sum函数相同功能的存储过程,完成两个数的相加

delimiter //    # 法一 用户变量
create procedure sums(in a int,in b int)
begin
    select a+b into @sumvalue; #这里是用户变量,看“@”符号
    select @sumvalue;
end //
delimiter ;
call sums(32,32); # 调用存储过程
-- -----------------------------------------------------------------------------
delimiter //    # 法二 局部变量
create procedure sumss(in a int,in b int)
begin
	declare valus int
    select a+b into valus; #这里是局部变量,无“@”符号
    select valus;
end //
delimiter ;
call sumss(32,32); # 调用存储过程
# 结果为:64

题目二:请写出一个存储过程,完成两个数的相加后减去第三个数

delimiter //   
create procedure texts(in a int,in b int,in c int)
begin
    select (a+b)/c into @sumvalue; #这里是用户变量,看“@”符号
    select @sumvalue;
end //
delimiter ;
call texts(2,4,6); # 调用存储过程
# 结果为:
1.00

题目三(OUT参数):请写出一个存储过程,完成两个数的相加后OUT给第三个数

-- out类型参数
delimiter //
create procedure outtest(in a int, in b int, out c int)
begin
	select a+b into c;
	-- select c;
end //
delimiter ;
call outtest(3,3,@c);
# 结果为
6

        可以看到,out参数是和以上两种参数的赋值方法不一样,被out的参数不需要声明和定义,只需要用out指定就可以了,在最后输出的就是该out参数。

4、文末彩蛋–轻松一刻

        真是人逢喜事精神爽呐,这不是刚过完国庆节嘛,前天打算去小熊家看看他和嫂子,于是就带上亮哥一起去他们家,这时候看见嫂子在给孩子喂奶,嫂子叫小熊去拿水果干给我们吃,然后亮哥呢出于礼貌,于是乎呢就上前摸摸孩子的脸,说:“宝贝好乖,白白胖胖的,皮肤真好,很漂亮!”然后我嫂子红着脸低声说:“孩子睡着了,脸在那边呢…”然后我一看呢,确实皮肤很好很白…

       今天到这里就结束了哟//每篇文章都有文末彩蛋–轻松一刻哟~加关注学习更多MySQL知识!谢谢观看,我是Jetuser-data

链接: [https://blog.csdn.net/L1542334210]
CSND:L1542334210
在这里插入图片描述
祝大家工作顺利!阖家欢乐!

你可能感兴趣的:(MySQL存储过程)