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 ;
----想成为合格的算法工程师----

浙公网安备 33010602011771号