一、存储过程:一组预先编译好的sql语句的集合,理解成批处理语句。
优点:
1.提高代码的重用性。
2.简化操作。
3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。
(一)创建语法
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的sql语句)
end;
注意:
1.参数列表包含三部分:参数的模式、参数名、参数类型
参数模式:
1)in:该参数可以作为输入
2)out:该参数可以作为输出,也就是该参数可以作为返回值
3)inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以作为返回值。
2.如果存储过程体仅仅只有一句话,begin end可以省略。
3.存储过程体中的每条sql语句的结尾要求必须加分号,存储过程的结尾可以使用delimiter重新设置。
4.存储过程不能修改。
语法:delimiter 结束标记
(二)调用语法
call 存储过程名(实参列表);
1.空参的存储过程
例:插入到admin表中五条数据
delimiter $
create procedure mypl()
begin
insert into admin(username,'password')
values('join1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
end $
call mypl();
2.带in模式参数的存储过程
例:创建存储过程实现,根据女神名,查询对应男神信息。
delimiter $
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=beautyName;
end $
call my2('rose')$
例:创建存储过程实现,用户是否登陆成功。
delimiter $
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.password=password;
select if(result>0,'成功','失败');
end $
call myp3('张飞','8888')$
3.带out模式参数的存储过程
例:根据女神名,返回对应的男生名和男神魅力值。
delimiter $
create procedure myp6(in beautyName vachar(20),out boyName varchar(20),out userCP omt)
begin
select bo.boyName,bo.userCP into boyName,userCP
from boys bo
inner join beauty b on bo.id=b.boyfriend_id
where b.name=beautyName;
end $
call myp6('小昭',@bName,@usercp)$
4.带inout模式参数的存储过程
例:传入a和b两个值,最终a和b都翻倍并返回
delimiter $
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)$
(三)删除存储过程
语法:drop procedure 存储过程名;
一次只能删除一个存储过程。
(四)查看存储过程的信息
语法:show create procedure 存储过程名;
二、函数
(一)创建语法
create function 函数名(参数列表) returns 返回类型
begin
函数体
end;
注意:
1.参数列表包含两部分:参数名 参数列表。
2.函数体肯定会有return语句,如果没有会报错。
3.如果函数体仅仅只有一句话,begin end可以省略。
4.函数体中的每条sql语句的结尾要求必须加分号,函数的结尾可以使用delimiter重新设置。
(二)调用语法
语法:select 函数名(参数列表);
执行完语句后显示返回值。
(三)查看函数
语法:show create function 函数名;
(四)删除函数
语法:drop function 函数名;
存储过程和函数的区别:
存储过程:可以有0个返回,也可以有多个返回,适合批量插入,批量更新。
函数:有且仅有1个返回,适合做处理数据后返回一个结果。