前言:存储过程,一个神奇的方法,学MySQL不学存储过程是不完整的,那么它究竟神奇在哪儿?今日说法博主带你走进揭秘存储过程…咳咳…我承认我有装*了。说明一点博主是将其理解为自编函数!请跟着我的脚步慢慢来~~
存储过程是一条或者多条SQL语句的集合,存储过程可以帮助我们:1、简化操作,减少冗余的操作步骤;2、 减少操作过程中的失误,提高工作效率。所以存储过程非常有用,应该尽可能学会和使用它。博主自己理解为是一种自编函数,但是与自变函数又不同的是它可以直接保存在MySQL里面以便直接使用,而自编函数得运行或者封装后方可调用。
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
里面:
是一种变量赋值的方法,但是它只能在子程序中声明并使用,也就是在begin…end代码块中,也即在你们想要实现的SQL功能语句中。其变量的赋值为(记得只能在begin…end里面使用,脱离口没法使用):
a. 使用set语句为变量赋值:
declare test int; # 介入一个赋值变量test
set test = 1 + 2; # 对该变量进行传值
b. 使用select…into为变量赋值:
declare test int; # 介入一个赋值变量test
select 1 + 2 into test; # 对该变量进行传值
也是一种变量赋值的方法,用户变量与链接有关,一个客户端定义的变量不能被其他客户端看到或使用,该变量也是我们常用的。当客户端退出时,该客户端连接的所有变量将自动释放。具体的说就是一个被赋值的变量,它不受begin…end的代码块限制,介入方法形式与局部变量不同,它是“@var_name”形式,不需要用declare定义。赋值为:
a. 使用SET语句为变量赋值:
set @test = 1 + 2;
select @test;
b. 使用select …into为变量赋值:
select 1 + 2 into @test;
select @test;
讲完理论知识,不来点题目冲刷一下,哪里找得到泥土里面埋藏的珍珠?
题目一:请写出一个和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参数。
真是人逢喜事精神爽呐,这不是刚过完国庆节嘛,前天打算去小熊家看看他和嫂子,于是就带上亮哥一起去他们家,这时候看见嫂子在给孩子喂奶,嫂子叫小熊去拿水果干给我们吃,然后亮哥呢出于礼貌,于是乎呢就上前摸摸孩子的脸,说:“宝贝好乖,白白胖胖的,皮肤真好,很漂亮!”然后我嫂子红着脸低声说:“孩子睡着了,脸在那边呢…”然后我一看呢,确实皮肤很好很白…
今天到这里就结束了哟//每篇文章都有文末彩蛋–轻松一刻哟~加关注学习更多MySQL知识!谢谢观看,我是Jetuser-data
链接: [https://blog.csdn.net/L1542334210]
CSND:L1542334210
祝大家工作顺利!阖家欢乐!