1.存储过程简介
是一组为了完成特定功能的SQL语句集合
比传统的SQL速度更快,执行效率更高
存储过程的优点:
- 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
- SQL语句加上控制语句的集合,灵活性高
- 在服务器端存储,客户调用时,降低网络负载
- 可多次重复被调用,可随时修改,不影响用户端调用
- 可完成所有的数据库操作,也可控制数据库的信息访问权限
2.创建存储过程
使用CREATE PROCEDURE语句创建存储过程
创建存储过程的语法结构
create procedure <过程名>([过程参数[...]])<过程体>
[过程参数[...]]格式
[IN|OUT|INOUT] <参数名> <类型>
#输入参数:IN
#输出参数:OUT
#输入/输出参数:INOUT
存储过程的主体部分,被称为过程体
以BEGIN开始,以END结束,若只有一条SQL语句,则可以省略BEGIN-END
以DELIMITER开始和结束
delimiter $$ #表示自定义结束符为$$
begin
...
end $$
delimiter ; #表示结束符改为;
2.1创建存储过程示例
1.不带参数
use aa;
delimiter $$ #将结束符号设为$$
create procedure chengji() #存储过程名为chengji,不带参数
begin #存储过程开始
select id,name,score from aa;
end $$ #存储过程结束
delimiter ; #将结束符号设为;
call chengji(); #执行chengji过程
2.附带过程参数参数
use aa;
set @id1=1,@id2=2,@id3=3;
delimiter $$
create procedure i(in id1 int(3),out id2 int(3),inout id3 int(3))
begin
select id1,id2,id3;
set id1=10,id2=20,id3=30;
select id1,id2,id3;
end $$
delimiter ;
call i(@id1,@id2,@id3);
id1=1,id2=null,id3=3 #out参数的值查询不到
id1=10,id2=20,id3=30 #三个参数的值都查询到了
select @id1,@id2,@id3;
id1=1,id2=20,id3=30 #in参数的值在存储过程外的查询时查不到
##总结:in参数不会对全局变量的值引起变化,out参数不会将全局变量的值传入存储过程中,inout参数结合了两者,既会对全局变量的值引起变化,也会将全局变量的值传入存储过程。
##in参数赋值类型可以是变量还有定值,而out和inout参数赋值类型必须是变量
3.删除存储过程
##语法
drop {procedure | function}[if exists]<过程名>
##if exists:防止因删除不存在的存储过程而引发错误
##示例
drop procedure i; #删除存储过程
call i; #查看该存储过程,确认删除
error... #报错,表示无该存储过程,删除成功
4.修改存储过程
存储过程的修改分为特征修改和内容修改
特征修改方法:
alter procedure <过程名>[<特征>...]
内容修改可先删除原有存储过程,之后再创建