MySQL学习-存储过程(一)

289 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

前言

上篇我们学习完了MySQL中的视图。有兴趣的小伙伴可以阅读(# MySQL学习-视图(三))。
下面继续学习MySQL中的存储过程。

MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无需关注存储过程和函数内部复杂的SQL逻辑,而只需要简单的调用存储过程和函数即可。

存储过程

定义

存储过程就是一组经过预先编译的SQL语句的封装。

存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的一系列SQL语句全部执行。

优点:

  1. 简化操作,提高SQL语句的重用性。
  2. 减少操作过程中的失误,提高效率。
  3. 减少网络传输量(客户端不需要把所有的SQL语句通过网络发给服务器)。
  4. 减少了SQL语句暴漏在网上的风险,也提高了数据查询的安全性。

对比视图,函数

  • 存储过程和视图有着同样的优点,清晰安全,可以减少网络传输量。不过它和视图不同,视图时虚拟表,通常不对底层数据表直接操作,而存储过程是程序化的SQL,可以直接操作底层数据表,相比于面向集合的操作方式,能够实现一些更复杂的数据处理。
  • 一旦存储过程被创建出来,使用它就像使用函数一样简单,我们直接通过调用存储过程名即可。相较于函数,存储过程是没用返回值的。

分类

存储过程的参数类型可以是IN,OUT和INOUT。根据这点分类如下:

  1. 没用参数(无参数无返回)
  2. 仅仅带IN类型(有参数无返回)
  3. 仅仅带OUT类型(无参数有返回)
  4. 既带IN又带OUT(有参数有返回)
  5. 带INOUT(有参数有返回)

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

创建存储过程

语法

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
[characteristics ...]
BEGIN
    存储过程体
END

今天先学习到这里,明天继续。