← 返回首页
MySQL基础教程(十九)
发表时间:2020-03-18 21:40:58
讲解MySQL的存储过程

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;