(转)MySQL存储过程/存储过程与自定义函数的区别

Posted 阿妮承呢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(转)MySQL存储过程/存储过程与自定义函数的区别相关的知识,希望对你有一定的参考价值。

转自:http://www.cnblogs.com/caoruiy/p/4486249.html

语法:

创建存储过程:

CREATE [definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body

其中:

proc_parameter : [IN|OUT|INOUT] parameter_name type

其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_name表示参数名称;type表示参数的类型

存储过程体中可以使用自定义函数(UDF)中使用的复合结构/流程控制/SQL语句/自定义变量等等内容,详情参阅 MySQL自定义函数用法详解-复合结构自定义变量/流程控制

调用存储过程:

CALL sp_name ([ proc_parameter [,proc_parameter ...]])

CALL sp_name 

说明:当无参时,可以省略"()",当有参数时,不可省略"()"

存储过程修改:

ALTER语句修改存储过程只能修改存储过程的注释等无关紧要的东西,不能修改存储过程体,所以要修改存储过程,方法就是删除重建!

删除存储过程:

DROP PROCEDURE [IF EXISTS] sp_name

示例:

创建无参存储过程:

复制代码
delimiter //
CREATE PROCEDURE showTime()
BEGIN
SELECT now();
END//
delimiter ;

CALL showTime;
复制代码

作用:显示当前时间,没什么实际意义

创建含参存储过程:

只有一个IN参数

复制代码
delimiter //
CREATE PROCEDURE seleById(IN uid SMALLINT UNSIGNED)
BEGIN
SELECT * FROM son WHERE id = uid;
END//
delimiter ;

call seleById(2);
复制代码

包含IN参数和OUT参数

复制代码
delimiter //
CREATE PROCEDURE deleteById(IN uid SMALLINT UNSIGNED, OUT num SMALLINT UNSIGNED)
BEGIN
DELETE FROM son WHERE id = uid;
SELETE row_count() into num;
END//
delimiter ;

call seleById(2,@changeLine);
SELETE @changeLine;
复制代码

说明:创建存储过程deleteById,包含一个IN参数和一个OUT参数.调用时,传入删除的ID和保存被修改的行数值的用户变量@changeLine,select @changeLine;输出被影响行数.

 

复制代码
存储过程与自定义函数的区别:

存储过程实现的过程要复杂一些,而函数的针对性较强;

存储过程可以有多个返回值,而自定义函数只有一个返回值;

存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;
复制代码
复制代码
存储过程存在的必要性(好处):

存储过程说白了就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.
提高了运行速度;
同时降低网络数据传输量(你觉得传一堆SQL代码快,还是传一个存储过程名字和几个参数快???)
复制代码

 

以上是关于(转)MySQL存储过程/存储过程与自定义函数的区别的主要内容,如果未能解决你的问题,请参考以下文章

存储过程与自定义函数

存储过程与自定义函数的区别

MySQL之自定义函数与存储过程

mysql存储过程 in out inout

MySQL存储过程和自定义函数Navicat for mysql创建存储过程和函数调用存储过程和函数的区别

我的MYSQL学习心得 自定义存储过程和函数