MySQL数据库操作学习(5)函数和储存过程

文章目录

    • 一、简介
    • 二、函数
      • 1.格式
      • 2.带参数的函数
      • 3.定义变量
      • 3.如何查询变量值
    • 三、储存过程
      • 1.格式
      • 2.参数
      • 3.in的接入参数
      • 4.out的接入参数
      • 5.in和out区别
    • 四、应用场景

一、简介

在 SQL 中,函数(Function)和存储过程(Stored Procedure)是两种可重复使用的数据库对象,但它们在设计和用途上有一些区别:

  1. 函数(Function)

    • 函数是一种接收参数并返回单个值的数据库对象。
    • 函数可以在 SELECT 语句中调用,用于计算和返回单个值。
    • 函数通常用于执行特定的计算或操作,并返回结果,比如数学运算、字符串操作等。
    • 函数可以被嵌套调用,也可以在其他查询中使用。
    • 函数不能包含数据操作语句(如 INSERT、UPDATE、DELETE)。insert updata delete
  2. 存储过程(Stored Procedure)

    • 存储过程是一组预编译的 SQL 语句集合,可接受参数并执行特定任务。
    • 存储过程可以包含各种 SQL 语句,包括数据操作语句(如 INSERT、UPDATE、DELETE)。
    • 存储过程可以执行一系列操作,如数据操作、流程控制、逻辑判断等。
    • 存储过程通常用于执行复杂的业务逻辑、数据操作和流程控制。
    • 存储过程可以返回多个结果集或输出参数。

总的来说,函数主要用于计算和返回单个值,而存储过程则更适合执行复杂的逻辑操作和数据处理。选择使用函数还是存储过程取决于具体的需求和场景。

二、函数

1.格式

delimiter 符号 # 自定义sql函数结束符号, 因为我们sql语句就是分号结束,一旦默认是分号结束,sql语句中运行到分号就会终止这个程序create function  函数名 returns 返回类型
begin函数体return 返回值end 符号delimiter;

delimiter try #create FUNCTION nb1()  returns INT
begin return (select s_id from student where class = 95032);end try
delimiter;# 查看return 函数结果select nb1();

2.带参数的函数

delimiter 符号 # 自定义sql函数结束符号, 因为我们sql语句就是分号结束,一旦默认是分号结束,sql语句中运行到分号就会终止这个程序create function  函数名(参数名 数据类型(n)) returns 返回类型
begin函数体return 返回值end 符号delimiter;

3.定义变量

set @变量名 = 数值;

3.如何查询变量值

select @变量名;
delimiter 小杨
create function nb2(str char(5)) returns INTbegin return (select kt_id from course where k_name = str);end 小杨
delimiter ;select nb2("小杨");select nb2("操作系统");set @name = '操作系统';
select @name;
select nb2(@name);

三、储存过程

1.格式

delimiter 符号create procedure 储存过程名称()
begin​	储存过程(查询语句的集合)end 符号
delimiter ;

delimiter $$CREATE procedure np1()
BEGINselect * from course;select * from student;end $$
delimiter;

2.参数

delimiter 符号create procedure 储存过程名称([in/out] 参数名 参数类型)
begin​	储存过程(查询语句的集合)end 符号
delimiter ;

3.in的接入参数

delimiter !
create procedure np2(in number int)
beginselect * from course where kt_id = number;select * from teacher where t_id = number;end !
delimiter;call np2(825);
set @number = 825;
call np2(@number);----

4.out的接入参数

而且out只能用形参传入,不能实参传入

delimiter !
create procedure np3(out number int)
beginselect number;set number = 32;select number;end !
delimiter;call np3(825);
set @number = 825;
call np3(@number);

5.in和out区别

在存储过程中,INOUT 是用来定义参数的关键字,它们在存储过程中的作用有所不同:

  1. IN 参数

    • IN 参数用于向存储过程传递数值,字符串或其他数据类型的值。
    • IN 参数是存储过程的输入参数,即在调用存储过程时传递给存储过程的值。
    • 存储过程内部可以使用 IN 参数的值,但不能对其进行修改
    • IN 参数默认是只读的,存储过程执行完后,参数的值不会发生变化。
  2. OUT 参数

    • OUT 参数用于从存储过程中获取返回值或输出参数。
    • OUT 参数是存储过程的输出参数,即存储过程执行完后会将结果赋值给 OUT 参数。
    • 存储过程内部可以修改 OUT 参数的值,这个修改后的值会在存储过程执行完后返回给调用者。
    • OUT 参数可以用来返回存储过程执行的结果、状态信息或其他输出值。

举例说明:

CREATE PROCEDURE GetEmployeeInfo(IN emp_id INT, OUT emp_name VARCHAR(50))
BEGINSELECT name INTO emp_name FROM employees WHERE id = emp_id;
END;

在上面的存储过程中,emp_id 是一个 IN 参数,用于传递员工的 ID 值;emp_name 是一个 OUT 参数,用于存储员工的姓名,这个姓名会在存储过程执行完后返回给调用者。

总的来说,IN 参数用于传递输入值给存储过程,而 OUT 参数用于从存储过程中获取返回值。

四、应用场景

函数和存储过程在 SQL 中有各自的使用场景,下面列举了它们常见的应用场景:

函数的使用场景

  1. 计算字段值:函数可以用于计算和返回特定字段的值,比如计算两个数的和、字符串的长度等。
  2. 数据转换:函数可以用于数据转换,比如日期格式转换、字符串格式化等。
  3. 约束条件:函数可以用于定义约束条件,确保数据符合特定规则。
  4. 查询优化:函数可以用于优化查询,减少重复计算或简化复杂查询。
  5. 数据加密:函数可以用于数据加密和解密操作。

存储过程的使用场景

  1. 复杂业务逻辑:存储过程适合处理复杂的业务逻辑,如订单处理流程、报表生成等。
  2. 数据操作:存储过程可以包含数据操作语句,用于管理和操作数据库中的数据。
  3. 事务管理:存储过程可以用于事务管理,确保一系列操作要么全部成功,要么全部失败。
  4. 权限控制:存储过程可以用于实现权限控制,限制用户对数据库的访问和操作。
  5. 性能优化:存储过程可以用于优化性能,减少网络通信开销和减少重复代码。

总的来说,函数适合简单的计算和数据转换操作,而存储过程适合处理复杂的业务逻辑和数据操作。在实际应用中,根据具体需求和场景选择合适的对象来实现相应的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web渗透测试漏洞复现:未授权访问漏洞合集

web渗透测试漏洞复现 Active MQ 未授权访问 Atlassian Crowd 未授权访问 CouchDB 未授权访问 Docker 未授权访问 Dubbo 未授权访问 Druid 未授权访问 Elasticsearch 未授权访问 FTP 未授权访问 Hadoop 未授权访问 JBoss 未授权访问 Jenkins 未授权访问 Jupyter Notebook 未授权…

竞争优势:大型语言模型 (LLM) 如何重新定义业务策略

人工智能在内容创作中的突破 在当今快节奏的商业环境中,像 GPT-4 这样的大型语言模型 (LLM) 不再只是一种技术新颖性; 它们已成为重新定义跨行业业务战略的基石。 从增强客户服务到推动创新,法学硕士提供了企业不容忽视的竞争优势。 1. 加强…

设计模式中的UML基础

设计模式中的UML基础 目录 1、UML概述 2、UML的用途 3、UML的构成 4、UML图 5、UML类图 5.1、类的构成 5.2、类与类之间的关系 6、绘制UML图的软件工具 在讲解设计模式时,会使用到UML建模中的类图去讲解类与类之间的关系,所以这里需要给大家普…

蓝桥杯day4刷题日记

P8605 [蓝桥杯 2013 国 AC] 网络寻路 思路来源于https://www.luogu.com.cn/article/iat8irsf #include <iostream> using namespace std; int n,m; int q[10010]; int v[100010],u[100010]; long long res;int main() {cin>>n>>m;for(int i0;i<m;i){cin…

【SpringSecurity】十三、基于Session实现授权认证

文章目录 1、基于session的认证2、Demosession实现认证session实现授权 1、基于session的认证 流程&#xff1a; 用户认证成功后&#xff0c;服务端生成用户数据保存在session中服务端返回给客户端session id (sid&#xff09;&#xff0c;被客户端存到自己的cookie中客户端下…

Android Studio实现内容丰富的安卓校园二手交易平台(带聊天功能)

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号083 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看二手商品列表 3.发布二手商品 4.商品详情 5.聊天功能…

NodeJS 中的设计模式

Node.js 是一个流行的 JavaScript 运行时&#xff0c;允许开发者使用事件驱动、非阻塞 I/O 模型构建可扩展的网络应用程序。和任何复杂的框架一样&#xff0c;Node.js 应用程序可以从使用成熟的设计模式中受益&#xff0c;以促进代码重用、可维护性和健壮性。本文将概述一些对 …

在微信小程序中或UniApp中自定义tabbar实现毛玻璃高斯模糊效果

backdrop-filter: blur(10px); 这一行代码表示将背景进行模糊处理&#xff0c;模糊程度为10像素。这会导致背景内容在这个元素后面呈现模糊效果。 background-color: rgb(255 255 255 / .32); 这一行代码表示设置元素的背景颜色为白色&#xff08;RGB值为0, 0, 0&#xff09;&a…

docker批量删除容器或镜像

删除容器 停止所有容器 删除所有容器&#xff0c;需要先停止所有运行中的容器 docker stop docker ps -a -q docker ps -a -q&#xff0c;意思是列出所有容器(包括未运行的)&#xff0c;只显示容器编号&#xff0c;其中 -a : 显示所有的容器&#xff0c;包括未运行的。 …

以太坊的演变:EIP、ERC 概念以及革命性的 ERC20、ERC721 和 ERC115 标准

文章目录 一、EIP——以太坊发展的基石1.1 什么是EIP&#xff1f;1.2 历史背景&#xff1a;前身的 BIP1.3 EIP的重要性1.4 流程&#xff1a;从提案到实施 二、进入 ERC——以太坊内的标准化协议2.1 解读 ERC&#xff1a;以太坊征求意见2.2 ERC 标准的诞生和意义 三、聚焦 ERC20…

如何动态修改spring中定时任务的调度策略(2)

上一篇文章中我们一下走读了一下spring中实现@Scheduled的源码,想必你对spring中实现定时调度的原理更加了解吧,文末我们两个问题, 1.spring在进行定时调度时,使用的线程池是默认,那么这个默认的线程池的配置是怎样的呢? 2.如何动态调整调度策略。 接下来我们详细分析一…

第四百一十二回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"给geolocator插件提交问题的结果"相关的内容&#xff0c;本章回中将介绍自定义标题栏.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

在Linux/Ubuntu/Debian中使用iFuse访问iOS 设备(例如 iPhone 或 iPad)上的文件可双向复制粘贴

iFuse 是一款工具&#xff0c;可让你在 Linux 系统上安装 iOS 设备&#xff08;例如 iPhone 或 iPad&#xff09;&#xff0c;使你能够访问其文件系统并与设备传输文件。 以下是有关如何使用 iFuse 的基本指南&#xff1a; 安装依赖项&#xff1a;在安装 iFuse 之前&#xff0c…

go语言-基础元素与结构的使用

go基础元素与结构的使用&#xff0c;快速上手 编译go文件 编译为可执行文件 go build 文件名.go运行文件 ./文件名输入/输出 引用fmt库&#xff08;关于输入输出的库&#xff09; 输入 **scanf&#xff1a;**按照给定的格式依次读取数据&#xff08;包括非法数据&#xff…

计算机网络——HTTP

HTTP报文格式长什么样&#xff1f; HTTP报文它是由请求行&#xff0c;请求头&#xff0c;请求体组成的 请求行他是请求或响应的基本信息 请求头他是使用key-value格式可以更加详细的说明报文 请求体是传输的具体内容 是如何分割的&#xff1f; 请求行与请求头他是用\r\n来…

wireshark windows 抓包https

windows下 1.配置环境变量以生成ssl协商会话密钥日志记录 系统设置-》高级设置-》环境变量 新增环境变量 SSLKEYLOGFILE C:\Users\Public\Documents\SSLKEY\sslkey.log 打开公用共享文档创建SSLKEY文件夹用于后续系统存放协商密钥日志 2.配置Wireshark选项进行抓包 点击…

(一)Linux+Windows下安装ffmpeg

一丶前言 FFmpeg是一个开源的音视频处理工具集&#xff0c;由多个命令行工具组成。它可以在跨平台的环境中处理、转换、编辑和流媒体处理音视频文件。 FFmpeg支持多种常见的音视频格式和编解码器&#xff0c;可以对音视频文件进行编码、解码、转码、剪辑、合并等操作。它具有广…

最近火绒的explorer问题,电脑黑屏只有鼠标

由于安全限制&#xff0c;覆盖文件是行不通的&#xff0c;按照火绒官方给的方法试试&#xff0c;还是不行。主要是他最后一步写得有问题。恭喜火绒&#xff0c;成功的将我们所有客户的电脑安装的火绒卸载。 解决方案 1、CTRLSHIFTESC调出任务管理器&#xff1b; 2、左上角&am…

.net使用excel的cells对象没有value方法——学习.net的Excel工作表问题

$exception {"Public member Value on type Range not found."} System.MissingMemberException 代码准备运行问题解决1. 下载别的版本的.net框架2. 安装3. 运行 代码 Imports Excel Microsoft.office.Interop.Excel Public Class Form1Private Sub Button1_Click(…

「实战应用」如何用DHTMLX构建自定义JavaScript甘特图(二)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 当您声称您的产品具有高级定制功能时&#xff0c;客户一定会对产品进行严格测试&#xff0c;这个规则当然适用于DHTMLX Gantt&…