1、什么是存储过程?
带有逻辑性的一组sql语句集,它被编译并与存储在数据库中,称之为持久性模块,可以反复使用;
2、怎么创建存储过程?
drop procedure if exists findallStudent; -- 判断是否存在,存在就删除
delimiter $ -- 声明结束符号,相当于我们书写sql时的";"
create procedure findallstudent();
begin
select*from student;
end$ -- 结束$
call findallstudent(); -- 调用
3、存储过程有哪些参数类型?
(1)in 输入参数 调用时必须制定,
(2)out 输出参数 可以被存储过程改变,并可以返回
(3)inout 输入输出参数 调用时指定,并且可以返回
4、代码示例
4.1 代码示例(1):用户输入数字1-7,输出对应的星期一到星期日;
drop procedure if exists print;
delimiter $
create procedure print(in num int,out result varchar(10))
begin
if num=1 then
set result='星期一';
elseif num=2 then
set result='星期二';
elseif num=3 then
set result='星期三';
elseif num=4 then
set result='星期四';
elseif num=5 then
set result='星期五';
elseif num=6 then
set result='星期六';
elseif num=7 then
set result='星期天';
else
set result='未知';
end if;
end$
call print(5,@result);
select @result'星期几';
4.2 代码示例(2):分页
delimiter $
drop procedure if exists pro_page$
create procedure pro_page(in pageno int,in pagesize int)
begin
declare num int;
set num=(pageno-1)*pagesize;
select *from emp limit num,pagesize;
end$
delimiter ;
-- 调用
call pro_page(3,3);
4.3 代码示例(3):case语句的mysql自义定函数
delimiter $
drop function if exists fun3$
create function fun3(num int)
returns varchar(20)
case num
when 1 then
return '您输入的是1';
when 2 then
return '您输入的是2';
else
return '您输入的数字不能识别';
end case;
$
delimiter ;
select fun3();
5、存储过程与自定义函数的区别
(1)、存储过程实现的功能要复杂一些,而函数的的针对性更强 ;
(2)、存储的过程可以返回多个值,函数只能有一个返回值 ;
(3)、存储过程一般独立的执行,而函数可以作为其他 SQL语句的组成部分来实现 ;
(4)、过程 通俗易懂的说法:它只是将其中的程序执行一遍 ;
(5)、函数 通俗易懂的说法:它不但将其中的程序执行一遍,还返回一个值。
6、存储过程的优缺点
6.1优点
1)、性能高:首先在性能上的提高,比起通过应用程序发送sql语句给数据库执行,让数据库自己内部执行存储过程效率更 高、速度更快(存储过程将sql编译好后存在数据库目录下);
2)、减少网络流量的开支:存储过程还减少了应用程序同服务器自己的信息交互频率,可以想象在不是使用存储过程的情况,
应用程序需要发送多条sql指令给服务器,而使用存储过程则只要一条调用存储过程的语句,然后获取需要的数据就ok 了。
3)、可复用性强:存储过程重用性比较高,并且是透明的,因为保存在数据库里面所以对任何应用来说都可以使用。新的应
用只需要调用相应的存储过程就可以得到相应的数据服务。
4)、安全性强:存储过程也是种安全的做法,数据库管理员可以对那些没有权限访问数据库中的表格的应用,给他们使用存
储过程的权限来获得数据服务,可以看到这个时候这些存储过程好像我们编程里面的”接口“这个概念。对于安全性要求很 高的系统,例如银行,基本上常用的操作都是通过存储过程或者函数来进行的,这样完全对应用”隐藏“了表格。