一.概述
有些数据库操作可能会非常复杂,
可能会需要多条sql语句一起去处理完成,
可以使用存储过程
二.简介
是一组为了完成特定功能的sql语句的集合
从5.0版本才开始支持
它可以加快数据库的处理速度,
增强数据库在应用 中的灵活性
-
存储过程是为了完成特定功能的sql集合
-
在使用过程中,是将常用或者复杂的工作预先使用sql语句写好,并用一个指定的名称存储起来。
-
这个过程经编译和优化后存储在数据库服务器中,当需要使用该存储过程时,调用即可
-
在执行时,需要先编译再执行
三.优点
1.存储过程优点:
- 1):提高执行效率,执行一次后,会将生成的二进制码驻留缓冲区
- 2):灵活性高,sql语句加上控制语句的集合
- 3):在服务器段存储,客户端调用时,降低网络负载
- 4):可多次重复被调用,可随时更改,不影响客户端调用
- 5):完成所有库操作,可控制数据库的信息访问权限
四.示例
1)创建存储过程(不带参数)
格式:
DELIMITER $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE xxx() #创建存储过程,过程名为xxx,不带参数
BEGIN #过程体以关键字 BEGIN 开始
sql语句; #过程体语句
END $$ #过程体以关键字 END 结束
DELIMITER ; #将语句的结束符号恢复为分号
例:
delimiter $$
create procedure cc()
begin
create table mk (id int(10),name char(10),score int(10));
insert into mk values(1,'wang',13);
select * from mk;
end $$
delimiter ;
call cc();
2)带参数存储过程
参数分为:
1.存储过程的主体部分,称为过程体
2.以begin开始,end结束,若只有一条sql语句,可以省略begin-end
3.以delimiter开始和结束
带参数存储过程:
- 输入参数:IN表示调用者向过程传入值
- 输出参数:out表示过程向调用者传出值
- 输入/输出参数:inout
- 表示调用者向过程传入值,又表示过程向调用者传出值
delimiter $$
create procedure getrole(in inname varchar(16))
begin
select a_id,a_name,a_level from test1 where a_name=inname;
end $$
delimiter ;
call getrole('aaaa');
3)查看存储过程
SHOW CREATE PROCEDURE [数据库.]存储过程名; #查看某个存储过程的具体信息
例:
show create procedure cc\G;
4)修改存储过程
alter procedure <过程名><特征>
show create procedure getrole\G;
alter procedure getrole modifies sql data sql security invoker;
show create procedure getrole\G;
5)删除存储过程
drop procedure if exists getrole;
总结:
存储过程:数据库操作复杂,可使用多条sql语句一起完成
为了完成特定功能的sql集合
就是将复杂的工作预先写好,指定存储起来
执行时进行调用
- 优点:①执行效率高
- ②:灵活
- ③可重复调用
- ④:完成所有库操作,可控制数据库信息访问
存储过程:
-
带参数
输入参数,IN:调用者向过程传入
输出参数:OUT,过程向调用者传出值 -
不带参数