mysql-17-procedure

#存储过程
/*
一组预先编译好的sql语句集合,理解成批处理语句

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

#一、创建
/*
create procedure 存储过程名(参数列表)
begin
	一组合法的sql语句
end

注意:
1、参数列表
	参数模式	 参数名  参数类型
in stuname varchar(20)

2、参数模式
in  该参数可以作为输入,传入值
out  该参数可以作为输出,返回值
inout  输入输出都可以

3、如果存储过程体只有一句话,begin end可以省略

4、存储体中,每条sql语句的结尾要求必须加分号;存储过程的结尾可以用delimiter重新设置
*/


#二、调用
/*
call 存储过程名(实参列表);
*/

#1、空参列表
#案例:插入到admin表中五条记录
use girls;
select * from admin;

delimiter &
create procedure myp1()
begin
	insert into admin(username, password) 
    values('john1', '0000'), ('lily', '1000');
end &

call myp1()&
select * from admin&


#2、创建带in模式参数的存储过程
#案例1:根据女生名,查询对应的男生信息
delimiter &
create procedure mpv2(
	in beauty_name varchar(20) 
)
begin 
	select bo.*
    from beauty as b
    left join boys as bo
    on bo.id = b.boyfriend_id
    where b.name=beauty_name;
end &

call mpv2('柳岩')&

#案例2:创建存储过程实现,用户是否登录成功
create procedure mpv3(
	in username varchar(20),
    in password varchar(20)
)
begin
	declare result varchar(20) default '';
	select count(*) into result  #赋值
    from admin
    where admin.username = username and admin.password = password;
    select if(result>0, '成功', '失败');
end&

call mpv3('张飞', '8888')&
call mpv3('john', '8888')&

#3、创建带out模式的存储过程
#案例1:根据女生名,返回对应的男生名
create procedure mpv4(
	in beautyName varchar(20),
    out boyName varchar(20)
)
begin
	select bo.boyName into boyName
    from boys as bo
    inner join beauty as b on bo.id = b.boyfriend_id
    where b.name = beautyName;
end&

#调用
call mpv4('小昭', @bName)&
select @bName;


#4、带inout模式的存储过程
#案例1:传入a和b两个值,最终a和b都翻倍并返回
create procedure mpv5(
	inout a int,
    inout b int
)
begin
	set a = a*2;
	set b = b*2;
end&

set @v1 = 10&
set @v2 = 20&
call mpv5(@v1, @v2)&
select @v1, @v2&

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


#查看存储过程
show create procedure mpv5;

delimiter ;

  

原文地址:https://www.cnblogs.com/chaojunwang-ml/p/13261710.html