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

MYSQL--存储过程操作

一:概念:

        存储过程实际上对标了JAVA当中的方法,两者是相似的,同时需要注意的一点是,MYSQL仅仅在5.0版本之后才出现这种存储操作的过程;

       

优点:

        1.存储过程能够让运行的速度变得更加迅速,仅仅只有首次进行实用的时候需要进行相应的编译,之后再次调用的时候可以直接进行实用

        2.存储过程的特点:模块化,代码复用,封装。

二:分类

1.存储过程关键语句

2.变量

3.参数传递

4.分支语句

5.循环语句

6.游标

7.异常处理handler

1.存储过程关键语句:

delimiter (设置启动的标识符);
create procedure (存储过程的名称) (参数传递关键词 参数名称 参数类型);
begin(检索代码)
end (开始设置的标识符);
delimiter  ;

2.变量:

1>变量类型:

①:局部变量

②:用户变量

③:参数变量

2>变量介绍:

        ①:局部变量

        范围:顾名思义,局部变量的作用范围比较的小,仅仅只能够作用在存储过程当中的begin--end之间进行实用,一旦超出范围进行调用,检索的时候就无法进行搜索:

        关键语句:

delimiter ..;
create procedure ...()begindeclare (局部变量名称) 局部变量的类型 [default ....(初始化)];
-- 开始对于局部变量进行赋值set (局部变量名称) = ...;(其他检索)
end ...;
delimiter ;select (局部变量名称); -- 不成功,因为在存储过程begin-end之外运行

        ②用户变量:

        范围:用户变量的作用范围有所增大,可以作用于当前的会话,也就是作用在当前互联网跟mysql的连接ing

        关键语句:

TIPS:
-- 1.需要注意的一点是,对于所有的用户变量,都不需要进行声明,赋值即声明
-- 2.对于所有的用户变量,都能够在存储过程的外面进行调用delimiter ...;
create procedure ...()
begin set (用户变量名称) =  ;
end ...;
delimiter ;select (用户变量名称); -- 可以搜索到相应的结果

        ③参数变量:

        参数变量又可以分为两个部分,一个是全局变量,一个是会话变量

                1.全局变量:

                        1>范围:

                        对于全局变量的修改会影响到一整个的服务器,并且对于全局变量来说,在MYSQL启动的时候由服务器自动对他们进行默认初始化,这些默认值可以通过my.in这个文件进行修改

                        2>关键语句:

关键使用语句:global
1.查看全局变量:
select global variables(全局变量名称);
2.查看具体的全局变量
show global@@.(相应的全局变量名称);
3.修改全局变量的值
set global (全局变量名称) = new_value;
                      2.会话变量:

                        1>作用范围:

                        对于会话变量,会在每一次建立新的连接的时候,MYSQL会对其进行初始化,将全局变量的值赋值一份用来当作当前新建会话的会话变量

                        2>关键语句:

1.查看局部变量
select session variables;2.查看具体的局部变量
select @session.(局部变量名称);3.修改局部变量的值
set session (局部变量名称) =new_value;

        TIPS: 其实两个变量大体上是一样的,仅仅只有在作用范围上不同,其他的都是一样。因此,如果两个变量都没有修改,那么全局变量跟用户变量的值是一样的,两者并没有区别;

三.参数传递:

        1.类型:参数传递主要分为三个,包括有三个部分分别是in,out,inout

        2.介绍:

                操作:

in:让数据能够进入到存储过程当中进行查询
delimiter \\;
create procedure emp_1(in name varchar(20))
begin select * from emp e where e.name=name;  -- 第二个name代表的是传入的参数的名称
end \\;
delimiter ;out:能够让参数进行返回使用
delimiter \\;
create procedure emp_2(in name varchar(20),out id int)
begin select e.id into id from emp e where e.name=name;  -- 第二个name代表的是传入的参数的名称
end \\;
delimiter ;call emp_2(‘刘一’,@id);
select @id;inout:能够对于输入的值进行修改,之后再进行返回
delimiter \\;
create procedure emp_3(inout name varchar(20))
begin select * from emp e where e.name=name;  -- 第二个name代表的是传入的参数的名称
end \\;
delimiter ;
set name='王老师';
call emp_3(name);

四:分支语句

        1.分类:

         分支语句主要包括有几个部分,if分支,case分支

        2.

                ①:if分支

关键语句:
if (条件) then 查询;
elseif (条件...) then查询:
else default(设置除了这些之外的其他操作会有什么结果)
endif;delimiter \\;
create procedure pro-1(in single int)
begin 
if single=1 
-- 如果输入数字为1那么就显示所有的员工信息;then select * from emp;
eles  select '错误选项';
endif;
end \\;
delimiter ;有关if的其他小知识:
leava 表示直接离开当前的条件判断  -- 相当于JAVA当中的break;
iterate 表示的是跳过当前的判断  -- 类似于在java当中的continue;

②case分支:

类似于JAVA当中的switch语句
语法一:
case case_value(变量名称)when when_value then select语句when when_value then select语句[else default]
end case;语法二:
casewhen search_condition then select...when search_condition then select...[else default]
end case;

五:循环语句:

        循环语句主要可以分为三大类:while , loop ,repeat

        循环是一种虽然只会程序当中出现一次,但是能够运行多次的代码

1.while

while循环类似于JAVA当中的while的循环,都是先判断条件,判断正确之后,可以再执行之后的语句,否则结束循环语句:
while(condition_value) do
循环体
end while;加入到存储过程当中:一:在表格当中插入数据,并且为自己控制插入多少条,设置use1存储过程
create table emp1(
id int primary key,
name varchar(20),
user varchar(20)
);delimiter \\;
create procedure use1(in single int)
begin declare i int default 1;
while(i<=single) doinsert into emp1 values(i,concat('user',i),'123456');set i = i+1;
end while;二:在表格当中插入single_0条数据,但是跳过第single_1条数据,设置use2存储过程
delimiter \\;
create procedure use2(in single_0 int,in single_1 int)
begindecalre i int default 1;
w while(i<=single_0) doa if(i = single_1) thenset i = i+1; iterate a;else insert into emp values(i,concat('user',i),'123456');set i = i+1;end if;
end while;
end \\;
delimiter ;

2.repeat循环语句

repeat循环相当于之前在java当中所学习的do-while循环,需要先执行查找语句,之后再进行判断条件语句:
[标签] repeat
循环体;
utile when_value;
end repeat[标签];

3.loop循环

loop循环不需要条件的判断,能够一直进行执行,所以,如果需要跳过循环,那么就需要使用相应的if条件判断,从而跳出这个死循环 -- 对应了java当中的while(true)循环语法:
[循环标签] loop 
循环体:
if when_value then....
elseif when_value then...
...leave [循环标签];...
end if;
end loop;

六.游标

1.介绍

        游标是一种能够存储查询结果集的数据类型,在存储过程当中可以使用光标对结果进行一定的循环处理

2.使用

        光标的使用包括:光标的声明,光标的打开,数值的获取,光标的关闭

-- 声明:
declare 游标名称 cursor for select_statement
-- 打开语法
open 游标名称
-- 取值语法
fetch 游标名称 into decl_name.....
-- 关闭语法
close 游标名称;

七.handler异常处理

1.介绍:

        在MYSQL当中,针对一些错误机制进行处理的方法,通过HANDLER的使用,能够在MYSQL查询的过程当中避免一些错误类型的出现;

2.语法:

handler 异常处理声明:declare (handler_action handler)for (condition_value) statement;handler_action:主要包括有三大部分
1.contitue  在错误出现之后继续之后的查询
2.exit 在错误出现之后不再进行之后的查询,直接结束所有的查询
3.UNDO不建议condition_value主要包括以下的几个部分
mysql_error_code
condition_name
SQLWARNING 
NOT FOUND 未查询到相应的数据
SQLEXCEPTION SQL查询错误同时的,如果需要使用handler句柄进行异常处理,首先需要考虑:
1.如果发现错误了,之后需要进行什么操作(condition_value)
2.这种错误是什么样的错误类型condition_valueTIPS:需要注意的一点,对于各种声明,顺序是,变量声明,游标声明,handler声明的顺序

相关文章:

MYSQL--存储过程操作

一&#xff1a;概念&#xff1a; 存储过程实际上对标了JAVA当中的方法&#xff0c;两者是相似的&#xff0c;同时需要注意的一点是&#xff0c;MYSQL仅仅在5.0版本之后才出现这种存储操作的过程&#xff1b; 优点&#xff1a; 1.存储过程能够让运行的速度变得更加迅速&#xff…...

C#上位机与三菱PLC的通信09---开发自己的通讯库(A-3E版)

1、A-3E报文回顾 具体细节请看&#xff1a; C#上位机与三菱PLC的通信05--MC协议之QnA-3E报文解析 C#上位机与三菱PLC的通信06--MC协议之QnA-3E报文测试 2、为何要开发自己的通讯库 前面开发了自己的A-1E协议的通讯库&#xff0c;实现了数据的读写&#xff0c;对于封装的通…...

【LeetCode】70. 爬楼梯(简单)——代码随想录算法训练营Day38

题目链接&#xff1a;70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到…...

图数据库 之 Neo4j - Cypher语法基础(5)

节点(Nodes) Cypher使用()来表示一个节点。 () # 最简单的节点形式,表示一个任意无特征的节点,其实就是一个空节点(movie) # 如果想指向一个节点在其他地方,我们可以给节点添加一个变量名(如movie),表示一个变量名为 movie的节点。(:Movie) # 表示一个标签为 Movie 的匿名…...

打造智能物品租赁平台:Java与SpringBoot的实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…...

盘点那些世界名校计算机专业采用的教材

清华、北大、MIT、CMU、斯坦福的学霸们在新学期里要学什么&#xff1f;今天我们来盘点一下那些世界名校计算机专业采用的教材。 书单目录 1.《深入理解计算机系统》&#xff08;原书第3版&#xff09;2. 《算法导论》&#xff08;原书第3版&#xff09;3. 《计算机程序的构造和…...

编程笔记 Golang基础 013 格式化输入输出

编程笔记 Golang基础 013 格式化输入输出 一、格式化输出1. fmt.Print系列函数2. Printf格式说明3. 格式化布尔类型 二、格式化输入1. fmt.Scan系列函数注意事项 三、练习小结 Go语言中的格式化输入和输出主要通过标准库 fmt 包来实现。主要是输出需要格式化。 一、格式化输出 …...

身份证实名认证接口-简单的身份认证API调用方法

还在为复杂的API调用头疼不已&#xff1f;今天为大家带来一种超简单的身份认证API调用方法&#xff0c;让你的工作效率瞬间起飞&#xff01; Java调用代码如下&#xff1a; import java.io.*; import okhttp3.*; public class main { public static void main(String []ar…...

数据结构·顺序表

1数据结构简介 学习数据结构与算法之前&#xff0c;一般是先学数据结构&#xff0c;方便之后学习算法&#xff0c;那么数据结构拆开介绍&#xff0c;就是数据 和 结构&#xff0c;数据&#xff0c;生活中到处都是&#xff0c;结构&#xff0c;就是数据存储的方式&#xff0c;即…...

玩转网络抓包利器:Wireshark常用协议分析讲解

Wireshark是一个开源的网络协议分析工具&#xff0c;它能够捕获和分析网络数据包&#xff0c;并以用户友好的方式呈现这些数据包的内容。Wireshark 被广泛应用于网络故障排查、安全审计、教育及软件开发等领域。关于该工具的安装请参考之前的文章&#xff1a;地址 &#xff0c;…...

静态时序分析:SDC约束命令set_drive详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 本章将讨论使用set_drive命令&#xff0c;它用于对输入端口的驱动能力建模。首先需要说明的是&#xff0c;默认情况下&#xff0c;DC在STA时默认输入端口的转换时间是0&#xff0c;这对于…...

C#算法(12)—对图像像素做X/Y方向的偏移

我们在上位机开发领域有时候需要对获取的图像的像素做整体的偏移,比如所有像素在X方向上偏移几个像素,或者所有像素在Y方向上偏移几个像素,本文就是开发了像素整体偏移算法来解决这个问题。 比如有一个图像大小为3*3,像素值如下图1,如果我想实现将这个幅图像的像素整体往右…...

说一说Eclipse的项目类型和常用项目的区别

Eclipse在新建项目的时候有很多类型&#xff0c;包括Java project、Web project等等&#xff0c;如下&#xff1a; 那么这些项目类型有什么区别呢&#xff1f;我们在创建项目的时候应该如何选择&#xff0c;了解清楚这一点还是非常重要的&#xff0c;但记住一个出发点&#xff…...

[opencv][windows]cmake opencv opencv_contrib所需的缓存文件下载

这个是windows上源码编译opencvopencv-contrib时候cmake时候缓存文件&#xff0c;只需要将压缩文件夹解压到源码目录下面,cmake-gui上configure时候就不会报错&#xff0c;注意解压后文件夹名字是.cache,文件夹名字不能改变&#xff0c;比如opencv/.cache&#xff0c;有的人解压…...

五步解决 Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法 参考debian网址https://packages.debian.org/buster/并搜索想要的软件或者工具等&#xff0c;如libc6,有结果如下&#xff1a; 具体就不介绍了&#xff0c;请浏览官网了解。 第一步&#xff1a;添加软件源&#xff0c;在/et…...

【Java EE初阶二十一】http的简单理解(二)

2. 深入学习http 2.5 关于referer Referer 描述了当前页面是从哪个页面跳转来的&#xff0c;如果是直接在地址栏输入 url(或者点击收藏夹中的按钮) 都是没有 Referer。如下图所示&#xff1a; HTTP 最大的问题在于"明文传输”,明文传输就容易被第三方获取并篡改. …...

STM32 与 ARM 谁比较强大?

STM32 和 ARM 是两个不同的概念&#xff0c;STM32 是一种微控制器产品&#xff0c;而 ARM 是一家处理器架构设计和许可的公司。因此&#xff0c;无法简单地比较它们的强大程度。 STM32 是基于 ARM Cortex-M 核的微控制器产品&#xff0c;具有高性能、低功耗、低成本和易于开发等…...

四、分类算法 - 朴素贝叶斯算法

目录 1、朴素贝叶斯算法 1.1 案例 1.2 联合概率、条件概率、相互独立 1.3 贝叶斯公式 1.4 朴素贝叶斯算法原理 1.5 应用场景 2、朴素贝叶斯算法对文本进行分类 2.1 案例 2.2 拉普拉斯平滑系数 3、API 4、案例&#xff1a;20类新闻分类 4.1 步骤分析 4.2 代码分析 …...

Javascript中var和let之间的区别

文章目录 一.变量提升(声)二.let和var的区别 区别&#xff1a; 1、var有变量提升&#xff0c;而let没有&#xff1b; 2、let不允许在相同的作用域下重复声明&#xff0c;而var允许&#xff1b; 3、let没有暂时性死区问题&#xff1b; 4、let创建的全局变量没有给window设置对应…...

不要抱怨,不如抱 Java 运算符吧 (1)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…...

人工智能导论:模型与算法(未来发展与趋势)

9 人工智能未来发展和趋势 人工智能作为引领新一轮科技革命和产业变革的战略性技术&#xff0c;正在深刻改变人类社会。本章从类脑计算、自动化机器学习、神经网络压缩、人工智能芯片、量子机器学习、人工智能伦理与治理、人工智能算法开发框架等方面&#xff0c;简要总结人工智…...

为什么所有人都在聊RAG?看这篇,小白也能彻底搞懂

你是否有过这样的经历——你满怀期待地问 AI 一个专业问题&#xff0c;它流畅地给了你一段"答案"&#xff0c;引经据典、逻辑自洽。 结果一查&#xff0c;发现全是错的。一本正经地胡说八道。 这就是大语言模型&#xff08;LLM&#xff09;的致命短板&#xff1a;它…...

2026年六大GEO公司排名竞争力横评及企业选型实操指南针

根据易观发布的《中国 GEO 行业发展报告 2026》显示&#xff0c;2026年国内 GEO 市场规模已达 30 亿元&#xff0c;在短短 3 年内实现了 35 倍的爆发式增长&#xff0c;超过 68% 的中大型企业已将生成式引擎优化正式纳入年度预算。在当前由大模型驱动的信息分发范式下&#xff…...

Vue3 + Element Plus 项目里,用ECharts 5.4.3做个动态数据大屏(附完整代码)

Vue3 Element Plus 与 ECharts 5.4.3 构建企业级动态数据大屏实战 数据可视化大屏已成为现代企业监控业务指标、分析趋势的核心工具。本文将深入探讨如何基于最新的 Vue3 和 Element Plus 技术栈&#xff0c;结合 ECharts 5.4.3 的强大可视化能力&#xff0c;构建一个高性能、…...

告别‘有线无网’:手把手修复Ubuntu 20.04上RTL8168网卡的驱动‘掉链子’问题

深度排查Ubuntu 20.04下RTL8168网卡驱动的疑难杂症 当你满怀期待地在工作站上安装好Ubuntu 20.04&#xff0c;准备开始一天的高效开发时&#xff0c;却发现网络连接图标上那个刺眼的红色叉号——有线网络无法连接。这种"有线无网"的窘境&#xff0c;对于依赖网络工作…...

Pandas数据筛选8大核心技巧:从布尔索引到query高效查询

1. 项目概述&#xff1a;为什么我们需要掌握Pandas数据筛选&#xff1f;如果你用Python做数据分析&#xff0c;那么Pandas库绝对是你的核心武器库。而在这个武器库里&#xff0c;数据筛选——也就是从庞大的数据集中精准地挑出你需要的那些行和列——是每天都要重复无数遍的操作…...

OpCore Simplify:30分钟完成专业Hackintosh配置的智能自动化工具终极指南

OpCore Simplify&#xff1a;30分钟完成专业Hackintosh配置的智能自动化工具终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经因为复…...

LabVIEW 32位版如何调用Halcon 17.12的.NET库?手把手教你打通图像处理流程

LabVIEW 32位版与Halcon 17.12 .NET库深度兼容指南&#xff1a;从原理到实战 在工业视觉和自动化测试领域&#xff0c;LabVIEW与Halcon的组合堪称黄金搭档。但当我们试图在32位LabVIEW环境中调用Halcon 17.12的.NET库时&#xff0c;常常会遇到各种"拦路虎"——从神秘…...

提前两小时,救一条命——从约翰·霍普金斯AI败血症预警系统看AI医疗的工程化之路

2026年5月12日&#xff0c;美国食品药品监督管理局&#xff08;FDA&#xff09;批准了一款来自约翰霍普金斯大学、由Bayesian Health商业化的AI败血症早期预警系统——Targeted Real-Time Early Warning System&#xff08;以下简称TRWS&#xff09;。这是FDA批准的首个持续监测…...

企业级应用如何利用Taotoken的容灾与路由能力保障AI服务高可用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业级应用如何利用Taotoken的容灾与路由能力保障AI服务高可用 对于将大模型能力深度集成到关键业务流程的企业应用而言&#xff0…...