概述
存储过程和函数类似于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 基础+高级篇.