02-015 MySQL_基础_存储过程

概述

存储过程和函数类似于Java中的方法,方法会封装,隐藏实现细节。
优点
提高代码重用性;
简化操作;
减少编译次数,减少连接数据库的次数;
含义
一组预先编译好的SQL语句集合,可以理解成批处理语句

创建语法

create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的SQL语句)
end
注意:
1.参数列表包括三部分 参数模式 参数名 参数类型
参数模式:
in :该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值又可以输出值

2.如果存储过程仅仅只有一句话,begin end 可以省略
存储过程体中的每条SQL语句的结尾必须加分号;
存储过程的结尾可以使用delimiter重新设置
语法:delimiter 结束标记 案例 delimiter $

调用

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

举例:
delimiter $$
1.插入admin 表5条记录

create procedure myp1()
begin 
	insert into admin(name,age)values('lily',20),('ggg',18);
end $$
call myp1() $$

2.in模式参数的存储过程
in 可以省略

create procedure myp2(in beautyName varchar(20))
begin 
	select bo.*
	from boys bo
	right join beauty b on bo,id = b.boyfriend_id
	where b.name = bo.beautyName;
end $$
call myp2('test') $$

多个参数,判断登录

create procedure myp3(in username  carchar(20),in password varchar(20))
begin 
	declare result varchar(30) default '';
	select count(*) into result
	from admin
	where admin.username = username
	and admin.password = password;
end $$
call myp4('test','123')$$

重点语句:

create procedure myp4(in username  carchar(20),in password varchar(20))
begin 
	declare result int default 0;
	select count(*) into result
	from admin
	where admin.username = username
	and admin.password = password;
	select if(result>0 ,'成功','失败');
end $$
call myp4('test','123')$$

3.out模式的存储过程
根据女生名返回男生名

create procedure myp5(in beautyName varchar(20),out boyName varchar(20))
begin
	select bo.boyName into boyName
	from boys bo
	inner join beauty b on bo.id = b.boyfriend_id
	where b.name = beautyName;
end $$
set @bName$$ #这句不定义省略也可以
call myp5('',@bName)$$
select @bName$$
create procedure myp6(in beautyName varchar(20),out boyName varchar(20),out score int)
begin
	select bo.boyName,bo.score into boyName,score
	from boys bo
	inner join beauty b on bo.id = b.boyfriend_id
	where b.name = beautyName;
end $$
call myp6('li',@bName,@score) $$
select @bName,@score $$

4.inout模式的存储过程
传入a和b两个值,最终a和b 都翻倍并返回

create procedure myp8(inout a int,inout b int)
begin 
	set a=a*2;
	set b=b*2;
end $$
set @m=10$$
set @n=20$$
call myp8(@m,@n)$$
select @m,@n $$

删除存储过程

drop procedure 存储过程名;
一次只能删除一个

查看存储过程的信息

show create procedure 存储过程名;

学习整理于MySQL 基础+高级篇.

发布了53 篇原创文章 · 获赞 0 · 访问量 388

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/103637310
今日推荐