存储过程
存储过程简单而言就是为以后的使用保存的一条或多条MySQL语句的集合。
存储过程支持的是MySQL5及以后的版本。
为什么使用呢?
安全、简单、高性能。
1、通过把处理封装在容易使用的单元中,简化复杂的操作。
2、由于不要求返回建立一系列的处理步骤,保障数据完整性,而且可以减少人员进行数据处理步骤,将会犯错可能性。
3、提高性能,存储过程的执行比单个的sql语句快。
4、将一些只可以用在单个请求中的MySQL元素和特性进行存储,在存储过程中可以用此编写更强大和灵活的代码。
例子:学生成绩表
创建存储过程
创建一个存储过程,begin和end用来限定存储过程体。针对的是计算出学生的平均成绩。
delimiter //
CREATE PROCEDURE studentavggrade()
BEGIN
SELECT AVG(grade) AS avggrade
FROM `score(成绩)`;
END//
delimiter ;
注意:mysql命令里面的语句之间的分隔符是英文的分号(;)。但是在存储过处理可以会出现需要分隔的语句,这时候就需要用delimiter临时改变分隔符为//,之后再变回来。
执行存储过程
CALL studentavggrade();
删除存储过程
DROP PROCEDURE studentavggrade;
使用参数
变量是内存中一个特定位置用来临时存储数据的。在存储过程当中不直接显示结果,而是把结果返回给指定的变量。
利用in(传递给存储过程),out(从存储过程传出)和inout(对存储过程传入和传出)类型的参数将检索的值保存相应变量里。call语句在给出相应数目的参数,用来接受变量里的值。
以下演示使用参数并调用
CREATE PROCEDURE studentavggrade(
OUT p1 DECIMAL(8,2),
OUT p2 DECIMAL(8,2),
OUT p3 DECIMAL(8,2)
)
BEGIN
SELECT AVG(grade) INTO p1 FROM `score(成绩)`;
SELECT MAX(grade) INTO p1 FROM `score(成绩)`;
SELECT MIN(grade) INTO p1 FROM `score(成绩)`;
END;
CALL studentavggrade(@gradeavg
@grademax
@grademin);
注意:一个参数不可以返回多行和列。
检查存储过程
利用语句获得何时、何者创建等详细信息的存储过程列表。
SHOW CREATE PROCEDURE studentavggrade();