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

数据表的存储过程和函数介绍

文章目录

    • 一、概述
    • 二、创建存储过程
    • 三、在创建过程中使用变量
    • 四、光标的使用
    • 五、流程控制的使用
    • 六、查看和删除存储过程

一、概述

存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复编写相同的SQL语句。而且。存储过程和函数是在MySQL服务器中存储和执行的。可以减少客户端和服务端的数据传输。

二、创建存储过程

创建存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中。存储程序可以分为存储过程和函数。在MySQL中创建存储过程使用的语句CREATE PROCEDURE。其语法形式如下:

CREATE PROCEDURE procedure_name([proc_param[,...]]) routine_body

在上述语句中,参数procedure_name表示要创建的存储过程名字,参数proc_param表示存储过程的参数,参数routine_body表示存储过程的SQL语句代码,可以使用BEGIN…END来标志SQL语句的开始和结束。
**注意:**在具体创建存储过程时,存储过程名不能与已经存在的存储过程名重名。

proc_param中每个参数的语法形式如下:
在上述语句中,每个参数由三部分组成,分别为输入/输出类型、参数名和参数类型。其中,输入/输出类型有三种类型,分别为IN(表示输入类型)、OUT(表示输出类型)、INOUT(表示输入/输出类型)。param_name表示参数名;type表示参数类型,可以是MySQL软件所支持的任意一个数据类型。

三、在创建过程中使用变量

在存储过程和函数中,可以定义和使用变量。用户可以使用关键字DECLARE来定义变量。然后为变量赋值。这些变量的作用范围是在BEGIN…END程序段中。

1.定义变量
在MySQL中,可以使用DECLARE关键字来定义变量。定义变量的基本语法如下:

DECLARE var_name[,...] type [DEFAULT value]

其中关键字DECLARE是用来声明变量的;参数var_name是变量的名称,可以同时定义多个变量;参数type用来指定变量的类型;DEFAULT value子句将变量默认值设置为value,没有使用DEFAULT子句时,默认值为NULL。
定义变量cid,数据类型为INT类型,默认值为10,代码如下:

DECLARE cid INT DEFAULT 10;

2.为变量赋值
在MySQL中可以使用关键字SET来为变量赋值,SET语句的基本语法如下:

SET var_name=expr[,var_name=expr]...

其中,关键字SET用来为变量赋值;参数var_name是变量的名称;参数expr是赋值表达式。一个SET语句可以同时为多个变量赋值。各个变量的赋值语句之间用逗号隔开。
例如,将变量tmp_id赋值为88,代码如下:

SET tmp_id = 88;

在MySQL中,还可以使用SELECT…INFO语句为变量赋值。其基本语法如下:

SELECT col_name[,...] INFO var_name[,...] FROM table_name WHERE condition

其中,参数col_name表示查询的字段名称;参数var_name是变量的名称;参数table_name指表的名称;参数condition指查询条件。
在这里插入图片描述

四、光标的使用

查询语句可能查询出多条记录,在存储过程和函数中使用光标来逐条读取查询结果集中的记录。光标的使用包括声明光标、打开光标、使用光标和关闭光标。光标必须声明在处理程序之前,并且声明在变量和条件之后。

1.声明光标
在MySQL中,可以使用DECLARE关键字来声明光标,其基本语法如下:

DECLARE cursor_name CURSOR FOR select_statement;

其中参数cursor_name表示光标的名称;参数select_statement表示SELECT语句的内容。

2.打开光标
在MySQL中,使用关键字OPEN来打开光标,其基本语法如下:

OPEN cursor_name;

其中,参数cursor_name表示光标的名称。

3.使用光标
在MySQL中,使用关键字FETCH来使用光标,其基本语法如下:

FETCH cursor_name INTO var_name [,var_name...];

其中参数cursor_name表示光标的名称;参数var_name表示将光标中的SELECT语句查询出来的信息存入该参数中。var_name必须在声明光标之前定义好。

4.光标光标
在MySQL中,使用关键字CLOSE来关闭光标,其基本语法如下:

CLOSE cursor_name;

其中参数cursor_name表示光标的名称。
在这里插入图片描述
在这里插入图片描述

五、流程控制的使用

在存储过程和函数中,可以使用流程来控制语句的执行,在MySQL中,可以使用IF语句、CASE语句、LOOP语句、LEAVE语句,ITERATE语句、REPEAT语句和WHILE语句来进行流程控制。

1.IF语句
IF语句用来进行条件判断。根据条件执行不同的语句,其语法的基本形式如下:

IF search_condition THEN statement_list 
[ELSEIF search_condition THEN statement_list] 
...
[ELSE statement_list] END IF

参数search_condition表示条件判断语句;参数statement_list表示不同条件的执行语句。

下面是一个IF语句的示例,代码如下:

IF age > 20 THEN SET @count1 = @count1 + 1;ELSEIF age = 20 THEN @count2 = @count2 + 1;ELSE @count3 = @count3 + 1;
END IF;

该示例根据age与20的大小关系来执行不同的SET语句。如果age值大于20,将count1的值加1;如果age值等于20,就将count2的值加1;其他情况将count3的值加1。IF语句都需要使用END IF来结束。
在这里插入图片描述
2.CASE语句
CASE语句可实现比IF语句更复杂的条件判断,其语法的基本形式如下:

CASE case_value
WHEN when_value THEN statement_list 
[WHEN when_value THEN statement_list] 
[ELSE statement_list]
END CASE

其中,参数case_value表示条件判断的变量;参数when_value表示变量的取值;参数statement_list表示不同的when_value值的执行语句。

下面是一个CASE语句的示例。代码如下:

CASE levelWHEN 20 THEN SET attack = attack + 5;WHEN 30 THEN SET attack = attack + 10;WHEN 40 THEN SET attack = attack + 15;ELSE SET attack = attack + 1;
END CASE

当级别level值为20时,attack值加5;当级别level值为30时,attack值加10;当级别level值为40时。attack值加15;否则attack + 1。CASE语句使用END CASE结束。

3.LOOP语句
LOOP语句可以使某些特定的语句重复执行,实现一个简单的循环。LOOP语句本身没有停止循环,只有遇到LEAVE语句等才能停止循环。LOOP语句的语法形式如下:

[begin_label:] LOOP
statement_list
END LOOP [end_label]

其中,参数begin_label和参数end_label分别表示循环开始和结束的标志,这两个标志必须相同。而且都可以省略;参数statemeng_list表示需要循环执行的语句。

下面是一个LOOP语句的示例,代码如下:

ADD_num:LOOPSET @count = @count + 1;
END LOOP add_num;

该示例循环执行count加1的操作。因为没有跳出循环,这个循环成了一个死循环。LOOP循环都以END LOOP结束。

4.LEAVE语句
LEAVE语句主要用于跳出循环控制,其语法形式如下:

LEAVE label

其中,参数label表示循环的标志。

下面是一个LEAVE语句的示例,代码如下:

add_num:LOOPSET @count = @count + 1IF @count = 100  THENLEAVE add_num;END IF;
END LOOP add_num;

该示例循环执行count值加1的操作。当count的值等于100时,LEAVE语句跳出循环。
在这里插入图片描述
5.ITERATE语句
ITERATE语句也是用来跳出循环的语句,但是ITERATE语句是跳出本次循环,然后直接进入下一次循环,ITERATE语句的语法形式如下:

ITERATE label

其中,参数label表示循环的标志。

下面是一个ITERATE语句的示例,代码如下:

add_num:LOOPset @count = @count +1;IF @count = 100 THENLEAVE add_num;ELSE IF MOD(@count, 3) = 0 thenITERATE add_num;select * from student;
END LOOP add_num;

该示例循环执行count加1的操作,count的值为100时结束循环,如果count的值能够整除3,就跳出本次循环,不再执行下面的SELECT语句。

6.REPEAT语句
REPEAT语句是有条件控制的循环语句,当满足特定条件时,就会跳出循环语句。REPEAT语句的基本语法形式如下:

[begin_label:] REPEATUNTIL search_conditionEND REPEAT [end_label]

其中,参数statement_list表示循环的执行语句;参数search_condition表示结束循环的条件,满足该条件时循环结束。

下面是一个REPEAT语句的示例,代码如下:

REPEATSET @count=@count+1;UNTIL @count=100
END REPEAT;

该示例循环执行count加1的操作,count值为100时结束循环。REPEAT循环都用END REPEAT结束。

7.WHILE语句
WHILE语句也是有条件控制的循环语句,但WHILE语句和REPEAT语句是不一样的。WHILE语句是当满足条件时执行循环内的语句。WHILE语句的基本语法形式如下:

[begin_label:] WHILE search_condition DOstatement_list
END WHILE [end_label]

其中,参数statement_condition表示循环执行的条件,满足该条件时循环执行;参数statement_list表示循环的执行语句。

下面是一个WHILE语句的示例。代码如下:

WHILE @count<100 DOSET @count = @count + 1;
END WHILE;

六、查看和删除存储过程

存储过程创建以后,用户可以通过SHOW STATUS语句来查看存储过程的状态,也可以通过SHOW CREATE语句来查看存储过程的定义。用户也可以通过查询information_schema数据库下的Routines表来查看存储过程的信息。

1.SHOW STATUS语句查看存储过程
在MySQL中,可以通过SHOW STATUS语句查看存储过程的状态。其基本语法形式如下:

SHOW PROCEDURE STATUS [like 'pattern'];

其中,参数PROCEDURE表示查询存储过程;参数LIKE 'pattern’用来匹配存储过程的名称。

2.SHOW CREATE语句查看存储过程的定义
在MySQL中,可以通过SHOW CREATE 语句查看存储过程的状态,语法形式如下:

SHOW CREATE PROCEDURE proc_name

其中,参数PROCEDURE表示查询存储过程;参数proc_name表示存储过程的名称。

3.information_schema.Routine表中查看存储过程的信息
存储过程和函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息。其基本语法形式如下:

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME = 'proc_name';

其中,字段ROUTINE_NAME中存储的是存储过程和函数的列名称;参数proc_name表示存储过程或函数的名称。

4.存储过程的删除
在MySQL中删除存储过程通过SQL语句DROP完成:

DROP PROCEDURE proc_name;

在上述语句中,关键字DROP PROCEDURE用来实现删除存储过程,参数proc_name表示所要删除的存储过程名称。

相关文章:

数据表的存储过程和函数介绍

文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合&#xff0c;然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...

【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)

【DeepSeek背后的技术】系列博文&#xff1a; 第1篇&#xff1a;混合专家模型&#xff08;MoE&#xff09; 第2篇&#xff1a;大模型知识蒸馏&#xff08;Knowledge Distillation&#xff09; 第3篇&#xff1a;强化学习&#xff08;Reinforcement Learning, RL&#xff09; 第…...

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 &#x1f30d;一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 &#x1f30d;二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…...

[特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)

Day 6&#xff1a;位运算&#xff08;异或性质、二进制操作&#xff09; &#x1f4d6; 一、位运算简介 位运算是计算机底层优化的重要手段&#xff0c;利用二进制操作可以大大提高运算速度。常见的位运算包括&#xff1a; 与&#xff08;&&#xff09;&#xff1a;a &am…...

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址&#xff1a;[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码&#xff1a;GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …...

LTO优化详解

嵌入式开发过程中的LTO优化是什么意思&#xff1f;能够用来解决什么问题&#xff1f;它都优化了哪些&#xff1f;仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题&#xff1f; 嗯&#xff0c;用户问关于嵌入式开发中的LTO优化&#xff0c;我需要详细解释这个概…...

分布式事务三阶段协议

分布式事务的三阶段分别是准备阶段、预提交阶段和提交 / 回滚阶段&#xff0c;以下是详细介绍&#xff1a; 三阶段提交协议可以理解为两阶段提交协议的改良版&#xff0c;是在协调者和参与者中都引入超时机制&#xff0c;并且把两阶段提交协议的第一个阶段分成了两步: 询问&am…...

LLaMA-Factory|微调大语言模型初探索(4),64G显存微调13b模型

上篇文章记录了使用lora微调deepseek-7b&#xff0c;微调成功&#xff0c;但是微调llama3-8b显存爆炸&#xff0c;这次尝试使用qlora微调HQQ方式量化&#xff0c;微调更大参数体量的大语言模型&#xff0c;记录下来微调过程&#xff0c;仅供参考。 对过程不感兴趣的兄弟们可以直…...

常用高压缩率的视频容器格式,并进行大比例压缩

常用的高压缩率视频容器格式,包括*.mp4 、*.mkv、*.webM等。     容器格式本身并不直接决定压缩率,而是取决于容器中所使用的视频编码格式等因素。不过,在常见的视频容器格式中,一些容器在搭配特定编码格式时,通常能表现出较高的压缩效率,以下是相关介绍: 1 MKV格式 …...

代码编译(词法义)

1.预处理 (Preprocessing)&#xff1a; 在这个阶段&#xff0c;编译器会处理所有以 # 开头的指令&#xff0c;如 #include、#define 等。它会把头文件的内容插入到源代码中&#xff0c;进行宏替换等预处理操作&#xff0c;生成一个纯净的代码文件。 3.词法分析 (Lexical Analy…...

android,flutter 混合开发,pigeon通信,传参

文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性&#xff0c;安全性&#xff0c;性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle&#xff0c;添加 Flutter module3. 在 Android app 的 build.gradl…...

at32f403a rt thread led基础bsp工程测试

1.led工程官方bsp使用 导出一个独立的AT32F403A的BSP工程 下载RTT源代码 gitee更新较慢 https://gitee.com/rtthread/rt-thread github版本更新最新 https://github.com/RT-Thread/rt-thread. 切换到V5.1.0分支(使用一个发布版本可以避免不必要的bug) 导出一个独立的AT32BSP…...

DeepSeek写贪吃蛇手机小游戏

DeepSeek写贪吃蛇手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端贪吃蛇H5文件&#xff1a; 要求 蛇和食物红点要清晰&#xff0c;不超过屏幕外 下方有暂停和重新…...

【好玩的工具和命令】 ASCII 艺术生成工具: figlet

figlet 是一款用于生成 ASCII 艺术文字的工具&#xff0c;支持多种字体样式。它能将输入的文本转换为由字符组成的大型字母图案&#xff0c;广泛应用于命令行环境下的标题展示或装饰。 核心功能 生成 ASCII 文字艺术&#xff1a;将普通文本转化为大号的、由字符构成的艺术字…...

工具--安川伺服故障代码

上传一下安川伺服故障代码&#xff0c;后续结合实际维修经验&#xff0c;逐个整理分析&#xff0c;绝对超出手册经验 故障代码 故障描述 a.020/a.02 用户参数和数检查异常 1 a.021/a.02 参数格式化异常 1 a.022/a.02 系统参数和数检查异常 1 a.023/a.02 参数密码异常…...

车载软件架构 --- OEM主机厂如何打入软件供应商内部?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

AI 编程助手 cursor的系统提示词 prompt

# Role 你是一名极其优秀具有10年经验的产品经理和精通java编程语言的架构师。与你交流的用户是不懂代码的初中生&#xff0c;不善于表达产品和代码需求。你的工作对用户来说非常重要&#xff0c;完成后将获得10000美元奖励。 # Goal 你的目标是帮助用户以他容易理解的…...

Matlab写入点云数据到Rosbag

最近有需要读取一个点云并做处理后&#xff0c;重新写回rosbag。网上有很多读取的教程&#xff0c;但没有写入。自己写入时也遇到了很多麻烦&#xff0c;踩了一堆坑进行记录。 1. rosbag中一个lidar的msg有哪些信息&#xff1f; 通过如下代码&#xff0c;先读取一个rosbag的l…...

业务流程相关的权威认证和培训有哪些

业务流程的认证和培训种类繁多&#xff0c;旨在帮助专业人士掌握业务流程管理 (BPM) 的知识和技能&#xff0c;从而提升个人职业发展和组织运营效率。下面分别介绍&#xff1a; 一、 业务流程认证和培训的种类 业务流程的认证和培训可以大致分为以下几类&#xff0c;涵盖了不…...

基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

智慧工地之施工重型设备机械识别管理图像数据集 挖掘机识别 装载机识别 反光背心 施工工人yolo格式数据集

施工管理计算机视觉数据集简介 类别Tags 标签 Object Detection 对象检测 Classes (11) 班级&#xff08;11&#xff09;Bull_dozer Dumb_truck Excavator 挖掘机 Grader 平地机 Loader 装载机 Mobile_crane Reflective vest 反光背心 Roller 滚筒 Safety helmet 安全帽Worker …...

如何判断一个关键词值不值得做、能不能做得上去?|SEO 实战全流程

&#x1f4a1; 别再盲目冲大词&#xff0c;一套数据决策体系帮你避开90%的坑做 SEO 最容易踩的坑&#xff0c;就是盯着大流量词猛冲&#xff0c;结果半年过去排名纹丝不动&#xff0c;或者好不容易排上去却没转化。判断一个关键词值不值得投入、能不能做得上去&#xff0c;不是…...

ASI-Evolve: 让AI自己搞研究、自己做实验、自己迭代进化 -- 这事靠谱吗?

你有没有想过一个问题&#xff1a;我们每天都在用AI做各种事情&#xff0c;但AI研究本身——设计更好的模型架构、清洗更高质量的数据、发明新的训练算法——还是得靠人类研究者一行行写代码、一轮轮跑实验、一遍遍分析结果。 这个过程有多慢&#xff1f;一个博士生探索一种新…...

学工平台让学生请假告别繁琐,移动审批随时处理

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...

【Docker镜像签名实战指南】:20年DevSecOps专家亲授,从零构建可信软件供应链

第一章&#xff1a;Docker镜像签名的核心价值与可信供应链全景图在容器化生产环境中&#xff0c;未经验证的镜像可能引入恶意代码、后门或配置漂移&#xff0c;导致集群级安全事件。Docker镜像签名通过数字签名机制&#xff0c;将镜像内容&#xff08;manifest 配置层哈希&…...

基于CYBER-VISION零号协议构建跨平台(Ubuntu/Windows)AI应用部署方案

基于CYBER-VISION零号协议构建跨平台&#xff08;Ubuntu/Windows&#xff09;AI应用部署方案 最近在折腾一个挺有意思的AI项目&#xff0c;需要把模型部署到不同的机器上&#xff0c;有的跑Ubuntu&#xff0c;有的跑Windows。一开始觉得&#xff0c;不就是装个环境、跑个服务嘛…...

别再为K-Means选K值发愁了!手把手教你用Python的sklearn库和肘部法则搞定最优聚类数

破解K-Means聚类难题&#xff1a;从肘部法则到实战调优全指南 当面对一堆没有标签的数据时&#xff0c;我们常常需要将它们分成几个有意义的组别。比如电商平台想要对用户进行分群&#xff0c;或者生物学家需要对细胞样本进行分类。这时候&#xff0c;K-Means算法往往会成为我们…...

传说不灭,只是悄悄换了主角:字节跳动在AI浪潮中杀出的血路

目录一、数据说话&#xff1a;字节到底有多猛二、三次"杀出来"&#xff1a;头条→抖音→AI2.1 第一次&#xff1a;2012年&#xff0c;推荐算法撕开信息分发2.2 第二次&#xff1a;2016年&#xff0c;抖音切走腾讯的命根子2.3 第三次&#xff1a;2025年&#xff0c;利…...

微服务实战:彻底解决子项目找不到父项目工具类、实体类的问题

目录 一、 核心原理与准备工作 二、 终极方案&#xff1a;一键 Install 父项目 三、 避坑指南&#xff1a;跳过单元测试 1.命令行跳过test步骤&#xff08;不推荐&#xff09; 2.可视化界面跳过test步骤&#xff08;推荐&#xff09; 四、 关键细节&#xff1a;一定要注意…...

基于python租房房源数据分析可视化系统 租房大数据 房屋信息 Hadoop 房源信息分析

1、项目介绍 Python 租房数据分析可视化系统 爬虫 Flask框架、Layui前端框架、Echarts可视化、requests爬虫、MySQL数据库 基于Python爬虫的租房数据分析可视化系统已初步成型&#xff0c;核心目标为解决应届毕业生就业与租房两大难题。系统通过挖掘拉勾网就业数据与链家网租房…...