MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 简单来说:存储过程,运行在数据库服务器端的带有逻辑的sql语句。
存储过程的优缺点分析
优点: - 存储过程可封装,并隐藏复杂的商业逻辑。 - 存储过程可以回传值,并可以接受参数。 - 存储过程无法使用 SELECT 指令来运行,执行速度比select快。因为它是子程序,与查看表,数据表或用户定义函数不同。 - 存储过程可以用在数据检验,强制实行商业逻辑等。
缺点: - 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程,可移植性差。 - 存储过程的性能调校与撰写,受限于各种数据库系统。
假设有以下测试数据,学生表和学生成绩表。

1.如何创建存储过程
基本语法:
create procedure procedure_name ([proc_parameter[,...]])
begin
-- sql语句
end ;
例如:创建一个查询学生人数的存储过程,返回学生数量。
create procedure getStudentsNumber (out num int) #带一个输出参数num,类型为int
begin
select count(*) into num from students;
end ;
#调用存储过程
call getStudentsNumber(@num);
#获取输出参数的值
select @num;

MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])
2.实例
创建一个存储过程,实现统计指定课程考试及格人数的功能。需要使用输入和输出参数,其中输入参数表示指定的课程编号,输出参数表示返回的及格人数。
参考代码如下:
#创建存储过程
create PROCEDURE sumCoursePassNumber(in p_cid varchar(4),out num int)
begin
select count(*) into num from score where cid= p_cid and score>=60;
end;
#查询课程编号为'C001'的及格人数
call sumCoursePassNumber('C001',@num);
select @num;
