细谈细谈Mysql的存储过程和存储函数的存储过程和存储函数
存储函数与存储过程作用类同,不同的是存储过程只能使用CALL语句来调用存储过程,只能用输出变量返回值,
而存储函数可以从语句外调用(即通过引用函数名),也能返回标量值。下面小编给大家详细讲一讲
1 存储过程存储过程
1.1 什么是存储过程什么是存储过程
存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句
(如CREATE,UPDATE,SELECT等语句)和过程式sql语句(如IF...THEN...ELSE控制结构语句)组成。存储过程思想上很简
单,就是数据库 SQL 语言层面的代码封装与重用。
1.2 存储过程的优缺点存储过程的优缺点
优点优点:
1.可增强sql语言的功能和灵活性
存储过程可以用流程控制语言编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
2.良好的封装性
存储过程被创建后,可以在程序中被多次调用,而不必担心重写编写该存储过程的sql语句。
3.高性能
存储过程执行一次后,其执行规划就驻留在高速缓冲存储器中,以后的操作中只需要从高速缓冲器中调用已编译好的二进制代
码执行即可,从而提高了系统性能。
缺点缺点:
存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存
储过程。
1.3 创建存储过程创建存储过程
1.3.1 DELIMITER定界符
在sql中服务器处理sql语句默认是以分号作为语句的结束标志,然而在创建存储过程时,存储过程体中可能包含多条sql语句,
这些sql语句如果仍以分号作为语句结束符,那么服务器在处理时会以第一条sql语句处的分号作为整个程序的结束符,而不再
去处理后面的sql。
为解决这个问题,通常使用DELIMITER命令,将sql语句的结束符临时修改为其他符号。
DELIMITER语法格式:
DELIMITER $$
$$是用户定义的结束符,通常这个符号可以是一些特殊的符号。另外应避免使用反斜杠,因为他是转义字符。
若希望换回默认的分号作为结束标记,只需再在命令行输入下面的sql语句即可。
DELIMITER ;
1.3.2 存储过程创建
在Mysql中,使用CREATE PROCEDURE语句来创建存储过程。
CREATE PROCEDURE p_name([proc_parameter[,...]])
routine_body
其中,语法项“proc_parameter”的语法格式是:
[IN|OUT|INOUT]parame_name type
1."p_name"用于指定存储过程的名称。
2."proc_parameter"用于指定存储过程中的参数列表。其中,语法项"parame_name"为参数名,"type"为参数的类型(类型可
以是Mysql中任意的有效数据类型)。Mysql的存储过程支持三种类型的参数,即输入参数IN,输出参数OUT,输入输出参数
INOUT。输入参数是使数据可以传递给一个存储过程;输出参数是用于存储过程需要返回的一个操作结果;输入输出参数既
可以充当输入参数也可以充当输出结果。
参数的取名不要和表中的列名相同,否则尽管不会返回出错信息,但储存过程中的sql语句会将参数名当做列名,从而引发不
可预知的错误。