mysql存储过程和存储函数的区别

server/2024/10/21 23:18:21/

MySQL中的存储函数和存储过程是两种不同类型的存储程序,它们各自具有独特的特点和适用场景。以下是它们之间的主要区别:

一、定义与功能

  1. 存储函数

    • 是一组为了完成特定功能的SQL语句集,但功能相对单一,针对性强。
    • 通常用于执行计算并返回结果,例如计算某些值或处理数据。
  2. 存储过程

    • 也是一组预编译的SQL语句集,但功能更为复杂和多样。
    • 通常用于执行一系列操作,可能包括查询、更新、删除等,也可以包含流程控制逻辑。

二、限制与灵活性

  1. 存储函数

    • 限制较多,例如不能用临时表,只能用表变量。
    • 不能执行对数据库状态有影响的操作,如事务控制(COMMIT、ROLLBACK)等。
  2. 存储过程

    • 限制相对较少,可以使用临时表,也可以执行事务控制等操作。
    • 可以从自己的存储过程内引用其它存储过程,简化复杂语句。

三、返回值

  1. 存储函数

    • 必须有返回值,且仅返回一个结果值。
    • 返回值类型可以是标量值(如整数、时间戳等),也可以是表对象(在特定类型的函数中)。
  2. 存储过程

    • 可以没有返回值,但可以通过输出参数(OUT参数)返回多个值或结果集。
    • 也可以返回单个结果集,但通常是通过SELECT语句在存储过程内部执行并返回给调用者。

四、调用方式

  1. 存储函数

    • 嵌入在SQL语句中使用,通常作为SELECT语句的一部分被调用。
    • 调用方式如:SELECT 存储函数名(参数值);
  2. 存储过程

    • 通过CALL语句调用。
    • 调用方式如:CALL 存储过程名(参数值);

五、参数类型

  1. 存储函数

    • 参数类型类似于IN参数,即数据只是从外部传入内部使用(值传递)。
    • 没有类似于OUT和INOUT的参数类型。
  2. 存储过程

    • 参数类型有三种:IN、OUT和INOUT。
      • IN:数据只是从外部传入内部使用(值传递)。
      • OUT:只允许过程内部使用(不用外部数据),并将结果返回给外部(引用传递)。
      • INOUT:外部可以在内部使用,内部修改的也可以给外部使用(引用传递)。

六、其他区别

  1. 存储函数

    • 通常用于执行计算并返回结果,不能用于执行修改全局数据库状态的操作。
    • 可以作为查询语句的一个部分来调用,且可以嵌套在其他SQL表达式中。
  2. 存储过程

    • 可以包含更灵活的数据库修改操作,如读取和修改数据。
    • 通常作为一个独立的部分来执行,不能嵌套在SQL表达式中。
    • 可以用于改变服务器配置、使用XML FOR子句以及包含事务控制语句等。

http://www.ppmy.cn/server/133744.html

相关文章

屏幕找图实现植物大战僵尸自动收取阳光

阳光图片 2.在截图中查找阳光,找到阳光使用鼠标点击进行收集 import java.awt.AWTException; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.MouseInfo; import java.awt.image.BufferedImage; import java.io.F…

浅析建造者模式

建造者模式 一、基础知识介绍 1. 问题引出 上图面存在的问题:产品和产品创建的过程是封装在一起的。耦合性太强 解决方法: 将二者解耦和 2.建造者模式介绍 将复杂对象的构造过程抽象出来,用户不用知晓里面的构建细节 3.四个角色 建造者模式的四个角…

centos8配置java环境变量jdk8u422-b05

1. 下载 JDK 8u422-b05 首先,确保已经下载了 JDK 8u422-b05 的二进制文件。如果还没有下载,你可以去 Oracle 官方网站或者其他可信的源下载 JDK 8u422。 2. 安装 JDK 将下载的 JDK 文件解压到 /usr/local/java 目录下: sudo mkdir /usr/l…

Spire.PDF for .NET【页面设置】演示:从 PDF 中删除页面

PDF 文档可以包含多个页面,这些页面具有不同的文本内容、图像或其他对象。有时,用户可能需要删除某些页面,这些页面包含不正确绘制的对象或与文档主题无关的页面。本文将演示如何使用Spire.PDF for .NET以编程方式从现有 PDF 文档中删除/移除…

移动 Web 核心笔记 (三)

移动适配 屏幕分辨率: 纵横向上的像素点数,单位是px PC 分辨率 1920 * 1080 1366 * 768 …… 缩放 150% 1920 / 150% 1080 / 150% 总结 硬件分辨率 → 物理分辨率(出厂设置) 缩放调节的分辨率 → 逻辑分辨率(软件/驱动设…

七天入门LLM大模型 |提示词工程-Prompt Engineering

标题00 引 言 前一天我们讲到:prompt(提示词)是我们和LLM互动最常用的方式,我们提供给LLM的Prompt作为模型的输入,并希望LLM反馈我们期待的结果。 虽然LLM的功能非常强大,但LLM对提示词(prom…

jmeter中发送post请求遇到的问题

用jmeter发送post请求,把请求参数放在Body Data处,参数都写得正确,但没想到结果每次都报错,直接响应结果乱七八糟,改成用Parameters,反而不乱报错了。 上图 请求里如下 另外一些请求也是这样 这个响应结果也是错误的…

ES推荐搜索、自动补全,并且springBoot集成

推荐搜索 在搜索过程中,因为单词的拼写错误,没有得到任何的结果,希望ES能够给我们一个推荐搜索。 GET movies/_search {"suggest": {# title_suggestion为我们自定义的名字"title_suggestion": {"text": &qu…