【MySQL】存储过程

存储过程

一组预先编译好的 SQL 语句的集合,可以理解成批处理语句。作用:

  1. 提高代码的重用性
  2. 简化操作
  3. 减少编译次数、减少了和数据库服务器的连接次数,提高效率

创建

create procedure 存储过程名(参数列表)
begin
	存储过程体(一组合法的 SQL 语句)
end
  • 参数列表:参数模式 参数名 参数类型

参数模式:

  1. in:该参数需要输入(默认)
  2. out:该参数可以输出
  3. inout :既需要传入值,又可以输出
  • 如果存储过程体中只有一条 SQL 语句,begin end 可以省略
  • 存储过程体中每条 SQL 语句的结尾要加分号 ;
  • delimiter 可以设置存储过程的结尾
delimiter 结束标志;

调用

call 存储过程名(实参列表);

无参数存储过程

drop procedure myp1;

delimiter $
create procedure myp1()
begin
	select * from `Reader`;
end $

call myp1(); -- 调用存储过程

in 参数存储过程

  • 存储过程的形参是局部变量,能在函数内部直接使用
drop procedure myp1;
delimiter $
create procedure myp1(in gender varchar(2))
begin
	select * from `Reader` 
    where sex = gender; -- 直接使用形参
end $

call myp1('男');

eg:查看用户是否登陆成功

create procedure myp3(in `username` varchar(20), in `password` varchar(20))
begin
	declare result int default 0; -- 声明并初始化局部变量

	select count(*) into result -- 给局部变量赋值
	from admin
	where admin.`username`=`username`
	and admin.`passowrd`=`password`;

	select if(result>0, '成功', '失败');
end $

call myp3('张飞', '123');

out 参数存储过程

  • out 后面的形参会自动返回给实参
  • 实参是用户变量,不用显示声明,可以直接使用

eg:根据读者名字,返回借阅数量

drop procedure if exists myp2;
delimiter $
create procedure myp2(in Name varchar(20), out borrowCount varchar(20))
begin
	select count(*) into borrowCount -- 给形参赋值
    from reader r
    inner join borrow b
    on b.readerNo = r.readerNo
    where readerName = Name;
end $

call myp2('张良', @count); -- 调用存储过程

select @count; -- 输出实参

inout 参数存储过程

eg:传入 a 和 b 两个值,最终 a 和 b 都翻倍并返回

drop procedure if exists myp3;
delimiter $
create procedure myp3(inout a int, inout b int)
begin
	set a = a * 2; -- 给局部变量赋值
	set b = b * 2;
end $

set @m = 10; -- 声明并初始化用户变量
set @n = 20;

call myp3(@m, @n); -- 调用存储过程

select @m, @n; -- 20 40

删除

drop procedure [if exists] 存储过程名;

每次只能删除一个存储过程

查看

show create procedure 存储过程名;

用于查看存储过程的具体信息

函数 & 存储过程

  • 存储过程:0 ~ n 个返回值 → 适合做批量插入,批量更新
  • 函数:有且仅有 1 个返回值 → 适合处理数据后返回一个结果

函数(点击查看)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JS.Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值