在MySQL数据库中,存储过程可以分为存储过程和存储函数,用于简化开发人员开发应用程序的工作量,并且对于存储过程和函数中SQL语句的改变,无需修改代码的上层应用程序。
存储过程和存储函数是一系列SQL语句的集合,它们被封装并存储在数据库中。
应用程序只需传递CALL关键字并指定存储过程的名称和参数即可调用存储过程;
应用程序只需传递关键字并指定存储函数的名称和参数即可调用存储函数。
存储过程和存储函数的区别:
1、存储过程可以有多个返回值或者没有返回值,而存储函数只有一个返回值;
2、存储过程的参数类型可以是IN、OUT、NOUT,存储函数的参数类型只能是IN;
IN:表示输入参数,需要调用者传递,默认;
OUT:表示输出参数,可以作为返回值;
INOUT:表示既可以作为输入参数,也可以作为输出参数。
3、存储过程中的语句功能比较强大,可以实现非常复杂的业务逻辑,而函数则有很多限制,比如函数中不能使用、、、等语句;
4、存储功能功能强大;
5、存储过程可以调用存储函数,但函数不能调用存储过程;
6、存储过程是一个相对独立的部分,而函数可以作为查询语句的一部分来调用。
存储过程:
创建存储过程:
关键字:用于声明sql语句的分隔符,告诉MySQL命令已经结束
SQL语句的默认分隔符是分号,但有时我们需要功能性SQL语句包含分号,但不将其用作结束标记。 这时候就可以用来指定分隔符了。
# 修改分隔符为$
$
#标准语法
存储过程名称([IN|OUT|INOUT]参数名称数据类型)
开始
SQL语句;
结束$
#将分隔符改为分号
;
# 调用存储过程
CALL存储过程名(实参);
#删除存储过程
DROP [IF] 存储过程名称;
变量名数据类型[默认];
定义为局部变量,只能在BEGIN END范围内使用
存储功能:
([ type[…]])#是存储函数的名称,type指定存储函数的参数,type参数用于指定存储函数的参数类型,可以是存储函数中所有支持的类型MySQL 数据库。
TYPE#指定返回值的类型
[ ... ] # 指定存储函数的特征
开始
#SQL代码内容
结果;
结尾;
调用存储的函数:
();
删除存储函数:
DROP 函数名称;
例子:
$
func1()#获取学生表中成绩大于95的学生人数
整数
开始
整数;
COUNT(*) INTO FROM WHERE 得分>95;
;
结束$
;