当前位置: 首页 > news >正文

10-存储过程和存储函数

基础

概念

  • MySQL的存储过程和存储函数是一种保存在数据库服务器上、可以用来执行特定工作的一组SQL代码的程序段。存储过程和存储函数可以包含针对数据库操作的SQL语句,还可以在其内部进行流程控制,而且执行速度快,所以在数据库应用开发中广泛使用。

  • MySQL的存储过程和存储函数的语法非常接近,但也是有区别的,主要如下:

    • 存储过程的参数可以有IN,OUT,INOUT三种类型;而存储函数只能有IN类型。
    • 存储过程声明时不需要返回类型;而存储函数声明时需要描述返回类型,且存储函数体中必须包含一个通过RETURN语句的返回值。
    • 存储过程中的语句功能更强大,可以实现很复杂的业务逻辑;而存储函数则有很多限制,也就是说,存储函数实现的功能针对性比较强。
    • 存储过程可以调用存储函数;而存储函数不能调用存储过程。
    • 存储过程一般是作为一个独立的部分来执行(使用CALL语句调用);而存储函数可以作为查询语句的一个部分来使用。

优点:

  • 存储过程和存储函数允许标准组件式编程,提高了SQL语句的重用性、共享性和可移植性。
  • 存储过程和存储函数是在MySQL服务器上执行的,执行速度快、网络通信流量小。
  • 存储过程和存储函数可以作为一种安全机制来利用,其权限可以与数据表的权限不同,保证数据的安全性。

存储过程

创建

  • 不带参数

    • 语法
    CREATE PROCEDURE <存储过程名> ( )[characteristic …]<存储过程体>
    

    说明:characteristic参数指定存储过程的特性,其主要取值及说明如下:
    [NOT] DETERMINISTIC:指定DETERMINISTIC 的优化器是否开启,默认选项为NOT DETERMINISTIC。
    CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA:指定子程序使用SQL语句的限制,默认指定为CONTAINS SQL。
    SQL SECURITY {DEFINER | INVOKER}:指定谁有权限来执行,默认指定为DEFINER。
    COMMENT ‘string’:注释信息。
    <存储过程体>是SQL代码的内容,可以用BEGIN…END来标志SQL代码的开始和结束。

    • 示例:

      • 创建一个不带有参数的存储过程up_softwareStudent,查询出“软件131”班级中的所有学生记录。

      在这里插入图片描述

  • 带参数:

    • 语法:
    CREATE PROCEDURE <存储过程名> ([参数1[,参数2[,[,参数n]]]])[characteristic …]<存储过程体>
    

    说明:
    <参数>的格式为:[IN | OUT | INOUT ] <参数名> <类型>。
    IN表示输入参数;OUT表示输出参数;INOUT表示既可以是输入、也可以是输出参数。
    <参数名>表示存储过程的参数名称。
    <类型>表示存储过程的参数类型,可以是MySQL数据库的任意数据类型。

    • 示例:

      • 创建一个带有输入参数的存储过程up_deptStudentInfo,通过一个给定的班级,查询出该班级中的所有学生记录。

      在这里插入图片描述

      • 创建一个带有输入和输出参数的存储过程up_scoreGradeInfo,通过一个给定的学号,查询出该学生选修课程的数量及平均分,并通过输出参数返回。

      在这里插入图片描述

执行存储过程

  • 存储过程是存储在服务器端的SQL语句的集合,要使用这些已经定义好的存储过程,就必须通过调用的方式来实现。存储过程被调用后,数据库系统将执行存储过程中的语句。执行存储过程需要拥有EXECUTE权限。
  • 调用存储过程使用CALL语句,其语法格式如下:
CALL <存储过程名>([<实际参数值1>[, 实际参数值2.]])
http://www.dtcms.com/a/456702.html

相关文章:

  • leetCode101:对称二叉树
  • 【Linux】网络部分——Socket编程 UDP实现网络云服务器与本地虚拟机的基本通信
  • 实战项目:鸿蒙多端协同智能家居控制 App 开发全流程
  • 个人用云计算学习笔记 --19 (MariaDB服务器)
  • Linux -- 信号【中】
  • Azure - 尝试创建并使用一下Azure AI Search
  • NtripShare GNSS接收机配置系统SPI读取村田SCL3300倾角数据
  • Python私教FastAPI+React构建Web应用02 什么是全栈Web应用
  • 开源安全管理平台wazuh-文件完整性监控FIM
  • 网站建设选超速云建站黄页88成立时间
  • 南通做网站ntwsd开发公司总工年终总结
  • VS Code文件监视排除设置详解
  • 3D坐标旋转公式
  • 《Git 从入门到进阶》教学大纲
  • linux网络服务+linux数据库5
  • 德山经济开发区建设局网站wordpress的数据库在哪里
  • P3808 AC 自动机(简单版)
  • C++----bitmap位图的使用
  • 单链表的应用02---算法中的暴力美学(第八讲)
  • 【RAG】优化query查询效果的几种处理
  • transformer详解(位置编码+attention+残差连接+全连接网络)
  • 已注册域名怎么做网站呢免费网站免费网站平台
  • 如何解决 pip install -r requirements.txt 约束文件 constraints.txt 仅允许固定版本(未锁定报错)问题
  • 【Camera】准备的一些Camera面试题——相机预览、拍照流程(经验尚欠,待补充)
  • CICD工具选型指南,GitLab cicd vs Arbess哪一款更好用?
  • 尉Lucene.Net 分词器选择指南:盘古分词 vs 结巴分词h
  • gitlab runner 安装
  • MySQL的OR条件查询不走索引及解决方案
  • 1688 店铺商品全量采集与智能分析:从接口调用到供应链数据挖掘
  • 淘宝商品详情采集方式,json数据返回