存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
为什么要使用存储过程??
①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
②批量处理:SQL+循环,减少流量,也就是“跑批”
③统一接口,确保数据的安全
相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。
创建存储过程:
delemiter //
create procedure 存储过程名([存储过程参数列表])
begin
set 参数名=参数;
SQL语句
end //
为什么使用delemiter??
mysql默认以分号作为sql语句的结束来进行执行,当我们在创建存储过程时,为了不让完整的存储过程语句由于分号而提前执行,需要临时规定以//或者$$来作为结束符号。这样的话,创建存储过程时,中间的分号会被忽略,直到遇到//符号才执行语句
存储过程参数分类:存储过程可以有0个或多个参数,用于存储过程的定义。
3种参数类型:
IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
delimiter //
create procedure 存储过程(in 变量名 类型)
begin
set 变量名=值;
SQL语句
end //
call 存储过程名(参数值)
OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
delimiter //
create procedure 存储过程(out 变量名 类型)
begin
set 变量名=值;
SQL语句
end //
call 存储过程名(参数值)
ex:
create procedure out_param(out p_out int)
begin
select p_out;
set p_out = 2;
select p_out;
endset @p_out = 1;
call out_param(@p_out);
select @p_out;
INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
create procedure out_param(inout p_out int)
begin
select p_out;
set p_out=2;
select p_out;
end
set @p_out=1;
call out_param(@p_out);
select @p_out;
调用存储过程:
set @参数名
call 存储过程名字([参数])