存储过程的定义:在大型数据库系统中 , 一组为了完成特定功能的 SQL 语句集 , 存储在数据库中 , 经过第一次编译后再次调用不需要再次编译 , 用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数) 来执行它 , 存储过程是数据库中的一个重要对象 ; 存储过程中可以包含 逻辑控制语句
和 数据操纵语句
, 它可以接受参数 , 输出参数 , 返回单个或多个结果集以及返回值 。
优点:精简,可维护性高,安全性更高。
缺点:可移植性差
我这里就简单介绍一下优缺点,我主要是来讲一下怎么用。
存储过程的基本格式;
create produce 存储名(参数)
begin
sql语句;
end;
怎么调用:call 存储名(参数);
怎么删除:drop produce if exists 存储名;
怎么使用带参数的存储过程,我举个例子
create procedure GetScores( out minScore decimal(8,2), out avgScore decimal(8,2), out maxScore decimal(8,2) ) begin select min(score) into minScore from user; select avg(score) into avgScore from user; select max(score) into maxScore from user; end;
调用此存储过程,首先参数前面你要加@
call getscores(@minscore,@avgscore,@maxscore)//写存储过程的时候不用加@.当你传入参数使用的时候要加上@。为了减少出错,写存储过程的时候变量名最好都加个2@.
记住返回的值都在@minscore,@avgscore,@maxscore这几个参数里也就是调用前世参数,调用后是结果。
所以选取值时应用select @minscore,@avgscore,@maxscore.
注意:记住sql的三个参数MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;
解释一下就是通过INTO来传值。
create procedure GetNameByID( in userID int, out userName varchar(200) ) begin select name from user where id = userID into userName; end;
上面的代码就是传入useid,然后传出usename