以下文章来源于何先振,责编小何

MySQL5.0开始支持存储过程和函数。
存储过程和函数能够将复杂的SQL逻辑封装一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数。
存储过程的理解:
存储过程是一组预先编译的SQL的封装。关键字:procedure。
执行过程:
存储过程先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器发出调用存储过程的命令,服务器就会把存储过程中封装的SQL全部执行。
好处:
简化操作,提高SQL语句的重用性,减少开发程序的压力。
减少操作过程中的失误,提高效率。
减少网络传输,客户端不需要将所有SQL语句通过网络发给服务器。
减少了SQL语句暴露在网上的风险,提高了数据安全性。
存储过程和视图、函数的对比:
视图是虚拟表,通常不对底层数据表直接操作,而存储过程可以直接操作底层数据表,能够实现一些复杂的数据处理。
一旦存储过程被创建出来,使用它就像函数一样简单。直接通过存储过程的名字调用。不过函数有返回值,存储过程没有返回值(通过out参数类型做返回值)。
分类:
存储过程的参数类型可以是in、out和inout。根据这点可以分类:
没有参数,无参数无返回
只有in参数类型,有参数无返回
只有out参数类型,无参数有返回
有out也有in的参数类型,有参数有返回
有inout的参数类型,有参数有返回
注意:in、out、inout都可以在一个存储过程中定义多个。
创建无参数无返回值的存储过程:
该存储过程查询emp表中的数据。前面的delimiter表示声明结束符号,默认结束符号是;,修改为/,后面又修改回;。

创建成功,调用存储过程就能查到表里的数据。

创建有返回参数的存储过程:

调用存储过程,需要传入变量

查询变量,可获取存储过程返回的值。

创建有参数,没返回值的存储过程:
创建传入员工名字,查看员工工资的存储过程。

调用存储过程,传入员工名字,查工资

查出来的跟员工表一样。

也可以声明变量,传入变量进行调用

创建有返回值,有传入参数的存储过程:
创建存储过程,传入员工名字返回员工的工资


调用存储过程,传入员工名字,通过变量接收。

创建又当参数又当返回值的存储过程:
使用inout的变量创建存储过程,查询员工的领导

调用存储过程,获取员工的领导名字

查看员工表Kochhar,员工编号是101。

查看Greenberg员工的,领导编号也是101。说明存储过程查出来的是正确的。

调试存储过程:
在MySQL中调试存储过程,需要把存储过程中的SQL语句复制出来,逐步调试,比较麻烦。





