欢迎光临散文网 会员登陆 & 注册

mysql_存储过程与存储函数

2023-03-03 10:18 作者:苏喆i  | 我要投稿

一.存储过程概述

1.理解

含义:存储过程的英文是 Stored Procedure 。它的思想很简单,就是一组经过 预先编译 的 SQL 语句 的封装。 

好处:

1、简化操作,提高了sql语句的重用性,减少了开发程序员的压力 

2、减少操作过程中的失误,提高效率 

3、减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器) 

4、减少了 SQL 语句暴露在 网上的风险,也提高了数据查询的安全性

和视图、函数的对比:

它和视图有着同样的优点,清晰、安全,还可以减少网络传输量。不过它和视图不同,视图是 虚拟表 , 通常不对底层数据表直接操作,而存储过程是程序化的 SQL,可以 直接操作底层数据表 ,相比于面向集 合的操作方式,能够实现一些更复杂的数据处理。

一旦存储过程被创建出来,使用它就像使用函数一样简单,我们直接通过调用存储过程名即可。相较于 函数,存储过程是 没有返回值 的。


2.分类

存储过程的参数类型可以是IN、OUT和INOUT。

1、没有参数(无参数无返回) 

2、仅仅带 IN 类型(有参数无返回) 

3、仅仅带 OUT 类型(无参数有返 回) 

4、既带 IN 又带 OUT(有参数有返回) 

5、带 INOUT(有参数有返回)

注意:IN、OUT、INOUT 都可以在一个存储过程中带多个。

二. 创建存储过程

语法:

1、参数前面的符号的意思 

IN :当前参数为输入参数,也就是表示入参; 存储过程只是读取这个参数的值。如果没有定义参数种类, 默认就是 IN ,表示输入参数。

OUT :当前参数为输出参数,也就是表示出参; 执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了。

INOUT :当前参数既可以为输入参数,也可以为输出参数。

2、形参类型可以是 MySQL数据库中的任意类型。

三. 调用存储过程

1.调用格式

2.举例:创建存储过程,实现累加运算,计算 1+2+…+n 等于多少。具体的代码如下:

3.如何调式

在 MySQL 中,存储过程不像普通的编程语言(比如 VC++、Java 等)那样有专门的集成开发环境。因此,你可以通过 SELECT 语句,把程序执行的中间结果查询出来,来调试一个 SQL 语句的正确性。调试成功之后,把 SELECT 语句后移到下一个 SQL 语句之后,再调试下一个 SQL 语句。这样 逐步推进 ,就可以完成对存储过程中所有操作的调试了。当然,你也可以把存储过程中的 SQL 语句复制出来,逐段单独调试。

. 存储函数的使用

语法:

说明:

1、参数列表:指定参数为IN、OUT或INOUT只对PROCEDURE是合法的,FUNCTION中总是默认为IN参数。 

2、RETURNS type 语句表示函数返回数据的类型; RETURNS子句只能对FUNCTION做指定,对函数而言这是 强制 的。它用来指定函数的返回类型,而且函数体必须包含一个 RETURN value 语句。 

3、characteristic 创建函数时指定的对函数的约束。取值与创建存储过程时相同,这里不再赘述。 

4、函数体也可以用BEGIN…END来表示SQL代码的开始和结束。如果函数体只有一条语句,也可以省略 BEGIN…END。

调用存储函数

五.对比存储函数和存储过程

此外,存储函数可以放在查询语句中使用,存储过程不行。反之,存储过程的功能更加强大,包括能够 执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。

六.关于存储过程使用的争议

尽管存储过程有诸多优点,但是对于存储过程的使用,一直都存在着很多争议,比如有些公司对于大型 项目要求使用存储过程,而有些公司在手册中明确禁止使用存储过程,为什么这些公司对存储过程的使用需求差别这么大呢?

优点

1、存储过程可以一次编译多次使用。

2、可以减少开发工作量。

3、存储过程的安全性强。

4、可以减少网络传输量。

5、良好的封装性。

缺点

1、可移植性差。

2、调试困难。

3、存储过程的版本管理很困难。

4、它不适合高并发的场景。


mysql_存储过程与存储函数的评论 (共 条)

分享到微博请遵守国家法律