Mysql 存储过程 / 存储函数

news2024/12/23 18:42:07

目录

0 课程视频

1 基本语法

1.0 作用 ->在数据库中 封装sql语句 -> 复用 -> 减少网络交互 ->可接收参数返回数据

1.1 创建

1.2 调用

1.3 查看

1.4 删除

1.5 ; 封号结束符 改成 $$ 双刀符合结束语句 -> 因为打包封号结束有冲突

1.6 在cmd 中定义 存储过程 打包的事务 -> 打包完 可以改回 封号

 2 navacat 中 mysql 文件结构树​编辑3 变量

3.1 @@指系统变量

3.1.1 全局变量 global

3.1.2 会话变量 session

3.1.3 查看系统变量

3.1.4 设置系统变量

3.1.5 设置global重启后回复初始值 -> 修改MySQL配置文件 /etc/my.cnf 

3.2 @指 用户自定义变量 ->作用域当前连接 会话

3.2.1 赋值

3.2.2 使用 -> 不用声明 -> 不存在返回null

3.3 局部变量

3.3.1 声明

3.3.2 示例 -> 作用域 begin end 范围之间

4 参数 -> 方法传参 -> 方法返回值

4.1 类型 in / out / inout

 4.2 用法

  4.2.1 定义->示例演示 -> 打包的存储过程可以传参 可以返回值

 4.2.2 调用 定义的方法 -> IN 参数  OUT 参数是定义局部变量@xxx 接收返回值

4.2.3 查看返回值 select @xxx

4.2.4 既是传入类型又是输出类型 inout -> 示例演示

5 判读

5.1 if ... then ...->示例演示 局部变量 -> 打包储存过程

5.2 case

5.2.1 语法一 

5.2.2 语法二 -> 示例演示

5.3 while 循环 ->满足条件 ->循环 

5.3.1 示例演示 -> 先储存 p7 -> 再call p7

5.4 repeat 循环 -> 满足条件 -> 退出循环

5.4.1 示例演示

5.5 loop 

5.5.1 loop 简单循环 -> 死循环

5.5.2 leave -> 退出循环 否则loop是死循环 -> 示例演示

5.5.3 iterate -> 必须再循环中 -> 跳过当前循环 执行下一次循环 ->示例演示

6 游标cursor -> 接收 打包的存储过程返回的结果集 / 表

6.1 基本语法

6.1.1 申明 declare xxx cursor for 查询语句

6.1.2 打开游标 open xxx ;

6.1.3 获取游标记录 -> 循环遍历 结果集 ->fetch xxx into 新定义的局部变量 yy ;

6.1.4 关闭游标 close xxx;

6.2 逻辑分析

6.2.1 声明游标 -> 查询 -> 记录结果集

6.2.2 建表 -> 接收数据 

6.2.3 while 循环 -> 获取数据 游标fetch-> 定义新局部变量接收值(while外面定义)

6.2.4 while中 新表 插入数据 insert into 新表 values(null , 新局部变量, 新局部变量2)

6.3 示例展示 ->局部变量要声明在游标之前

7 条件处理程序 -> 异常处理

7.1 语法

7.2 示例演示 -> 报错状态码

7.3 官方异常状态码含义查询网站

7.4 优化写法 declare exit handler for not found close 游标名 ;

8 存储函数(用的少) -> 定义方法/函数 -> 必须有返回值

8.1 示例演示 必须指定 deterministic / no sql / reads sql data 三选一

 8.2 调用函数 select fun1(100); fun1是函数名


0 课程视频

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=102&spm_id_from=pageDriver&vd_source=ff8b7f852278821525f11666b36f180a

1 基本语法

1.0 作用 ->在数据库中 封装sql语句 -> 复用 -> 减少网络交互 ->可接收参数返回数据

1.1 创建

create procedure p1()
begin
    select count(*) from student;
end;

1.2 调用

call p1();

1.3 查看

-- 第一种 数据库有哪些 存储过程 ->打包的操作事务
select * from infromation_schema.Routines where routine_schema = '数据库名' ;
-- 第二种 储存过程 ->打包的操作事务 具体的语句
show create procedure p1;

1.4 删除

drop procedure if exists p1 ;

1.5 ; 封号结束符 改成 $$ 双刀符合结束语句 -> 因为打包封号结束有冲突

delimiter $$  // 此句无封号 ;

1.6 在cmd 中定义 存储过程 打包的事务 -> 打包完 可以改回 封号

 2 navacat 中 mysql 文件结构树3 变量

3.1 @@指系统变量

3.1.1 全局变量 global

3.1.2 会话变量 session

3.1.3 查看系统变量

show variables; // 查看所有 默认session 会话级别变量
show session variables like 'atuo%' ; // 后模糊匹配 atuo
show global variables like 'atuo%' ;

select @@autocommit ;  // 查看具体变量的值 autocommit是具体系统变量 默认session 
select @@global.autocommit ;

3.1.4 设置系统变量

set session autocommit = 0 ; // autocommit 是具体的变量 自动提交事务关闭

3.1.5 设置global重启后回复初始值 -> 修改MySQL配置文件 /etc/my.cnf 

3.2 @指 用户自定义变量 ->作用域当前连接 会话

3.2.1 赋值

-- 赋值 可以是 =  也可以是 :=
-- 推荐使用 := 因为MySQL 没有比较运算符 比较运算符用的是= 
set @myname = 'xxx' ;
set @myage := 18 ;

-- 一次赋值多个
set @myage := 'xxx',@myname = 'xxx';

-- 查询结果赋值给变量
select count(*) into @mycount from user ;

3.2.2 使用 -> 不用声明 -> 不存在返回null

select @myname , @myage ;

3.3 局部变量

3.3.1 声明

declare xxx int default 0 ;

3.3.2 示例 -> 作用域 begin end 范围之间

create procedure p2()
begin
    declare xxx int default 0; // 申明局部变量
    select count(*) from student ; // 封号是因为这里不是用cmd终端 ,用的是idea数据库终端
end;

4 参数 -> 方法传参 -> 方法返回值

4.1 类型 in / out / inout

 4.2 用法

  4.2.1 定义->示例演示 -> 打包的存储过程可以传参 可以返回值

 

 4.2.2 调用 定义的方法 -> IN 参数  OUT 参数是定义局部变量@xxx 接收返回值

call p4(68, @result); // IN 参数68  OUT 参数 定义局部变量@result

4.2.3 查看返回值 select @xxx

select @xxx ;

4.2.4 既是传入类型又是输出类型 inout -> 示例演示

5 判读

5.1 if ... then ...->示例演示 局部变量 -> 打包储存过程

5.2 case

5.2.1 语法一 

5.2.2 语法二 -> 示例演示

5.3 while 循环 ->满足条件 ->循环 

5.3.1 示例演示 -> 先储存 p7 -> 再call p7

5.4 repeat 循环 -> 满足条件 -> 退出循环

5.4.1 示例演示

5.5 loop 

5.5.1 loop 简单循环 -> 死循环

5.5.2 leave -> 退出循环 否则loop是死循环 -> 示例演示

5.5.3 iterate -> 必须再循环中 -> 跳过当前循环 执行下一次循环 ->示例演示

6 游标cursor -> 接收 打包的存储过程返回的结果集 / 表

6.1 基本语法

6.1.1 申明 declare xxx cursor for 查询语句

declare xxx cursor for 查询语句->是个表 结果集 ;
declare xxx cursor for select ... from ... where ... ;

6.1.2 打开游标 open xxx ;

 open xxx ;

6.1.3 获取游标记录 -> 循环遍历 结果集 ->fetch xxx into 新定义的局部变量 yy ;

declare yy varchar(10);
fetch xxx into 新定义的局部变量 yy ;

6.1.4 关闭游标 close xxx;

6.2 逻辑分析

6.2.1 声明游标 -> 查询 -> 记录结果集

6.2.2 建表 -> 接收数据 

6.2.3 while 循环 -> 获取数据 游标fetch-> 定义新局部变量接收值(while外面定义)

6.2.4 while中 新表 插入数据 insert into 新表 values(null , 新局部变量, 新局部变量2)

6.3 示例展示 ->局部变量要声明在游标之前

 ps: 代码两个bug 1.死循环->解决办法 条件处理程序 2.局部变量定义需要在游标定义之前

7 条件处理程序 -> 异常处理

7.1 语法

7.2 示例演示 -> 报错状态码

7.3 官方异常状态码含义查询网站

http://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html

7.4 优化写法 declare exit handler for not found close 游标名 ;

8 存储函数(用的少) -> 定义方法/函数 -> 必须有返回值

8.1 示例演示 必须指定 deterministic / no sql / reads sql data 三选一

 

 8.2 调用函数 select fun1(100); fun1是函数名

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

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

相关文章

基于 SpringBoot+Vue+Java 的财务管理系统(附源码,教程)

文章目录 一 简介第二.主要技术第三、部分效果图第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1管理员功能模块 一 简介 财务管理系统的需求和管理上的不断提升,财务管理系统的潜力将无限扩大,财务管…

Postman预请求脚本、测试脚本(pre-request scripts、tests常用工作总结)

文章目录 Postman预请求脚本(pre-request scripts工作常用总结)Postman预请求脚本Postman测试脚本预请求脚本和测试脚本有什么区别常用工作总结登录接口返回的是Set-Cookie标头 Postman预请求脚本(pre-request scripts工作常用总结&#xff0…

Spring Boot配置文件及日志信息

目录 前言: Spring Boot优点 配置文件 配置文件格式 读取配置文件 properties配置文件格式 properties优缺点分析 yml配置文件格式(另一种标记语言) yml优缺点分析 Spring Boot 不同平台配置文件规则 日志信息 日志的功能 Sprin…

Springboot +Flowable,设置任务处理人的四种方式(一)

一.简介 学习下UserTask 设置用户的三种方式,至于如何设置用户组,下篇文章再聊。 现在,假设我有如下一个简单的流程图: 那么该如何设置这个用户节点的处理人? 二.第一种:指定具体用户 第一种方式&…

电路中噪声来源

电路包括不同的部件和芯片,所有都有可能成为噪声的来源。例如,电阻会带来热噪声,这个噪声为宽频噪声,几乎涵盖所有频率范围;运算放大器其芯片内部会产生噪声;而 ADC产生的量化噪声相较于其他器件&#xff0…

【】右值引用完美转发

文章目录 右值引用和左值引用左值和右值概念左值引用 && 右值引用右值引用使用场景和意义左值引用的使用场景**左值引用的短板:**右值引用和移动语义STL容器增加的接口move函数右值引用的其他使用场景 完美转发万能引用完美转发保持值的属性完美转发的使用场景 右值引用…

【Linux】进程信号 --- 信号产生 信号递达和阻塞 信号捕捉

🍎作者:阿润菜菜 📖专栏:Linux系统编程 文章目录 一、预备知识二、信号产生1. 通过终端按键产生信号1.1 signal()1.2 core dump标志位、核心存储文件 2.通过系统调用向进程发送信号3.由软件条件产生信号3.1 alarm函数和SIGALRM信号…

vue3通过ref拿element弹框中的组件问题

写在<el-dialog>中的组件&#xff0c;在一开始&#xff0c;弹框没有弹出来的时候&#xff0c;<el-dialog>中的组件是没有被渲染出来的&#xff0c;因此在<el-dialog>中使用ref标记某个组件&#xff0c;在el-dialog没有被渲染出来之前去拿的话&#xff0c;是拿…

ml常见代码片段

常用ML代码片段 变换一列 new_df[brand] new_df[prod_name].apply(lambda x: x.split()[0])变换2列 new_df[chip_total_sales] new_df.apply(lambda x: x[total_sales] * x[is_chip], axis 1) # 重要的是axis1groupby 计数&#xff0c;求和&#xff0c;取第一个值&#x…

C语言起源、特性和发展历程

本文从ALGOL 60语言谈起&#xff0c;简述C语言的起源和发展历程&#xff0c;然后对C语言的一些特性做了探讨&#xff0c;最后说说C语言为什么在众多编程语言中&#xff0c;起到了承上启下的作用。 本文介绍以下内容&#xff1a; C语言的起源C语言的发展C语言的特性C语言的重要…

外卖项目优化-01-redis缓存短信验证码、菜品数据

文章目录 外卖项目优化-01课程内容前言1. 环境搭建1.1 版本控制解决branch和tag命名冲突 1.2 环境准备 2. 缓存短信验证码2.1 思路分析2.2 代码改造2.3 功能测试 3. 缓存菜品信息3.1 实现思路3.2 代码改造3.2.1 查询菜品缓存3.2.2 清理菜品缓存 3.3 功能测试3.4 提交并推送代码…

AutoGPT安装教程

最近安装AutoGPT时遇到了一些问题&#xff0c;写下这篇文章记录一下 1 下载AutoGPT AutoGPT链接&#xff1a;https://github.com/Significant-Gravitas/Auto-GPT/tree/v0.2.2 下载AutoGPT 推荐下载stable 版本 2 申请openai 的api key 获取api的key&#xff0c;这里就不介…

【超算/先进计算学习】日报8

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记阶段一阶段二阶段三阶段四 对自己的表现是否满意简述下次计划其他反馈 今日已完成任务列表 超算/高性能计算总结 遇到的问题及解决方案 无 任务完成详细笔记 阶段一 在学习的第一阶段&#xff0c;我们首先对需要…

ChatGPT+智能家居在AWE引热议 OpenCPU成家电产业智能化降本提速引擎

作为家电行业的风向标和全球三大消费电子展之一&#xff0c;4月27日-30日&#xff0c;以“智科技、创未来”为主题的AWE 2023在上海新国际博览中心举行&#xff0c;本届展会展现了科技、场景等创新成果&#xff0c;为我们揭示家电与消费电子的发展方向。今年展馆规模扩大至14个…

【pytest里的参数化:看几个例子就够了!】

参数化多个参数&#xff1a;可以使用多个参数来参数化测试。例如&#xff1a; import pytestpytest.mark.parametrize("x, y, expected", [(1, 2, 3),(3, 4, 7),(5, 6, 11), ]) def test_addition(x, y, expected):assert x y expected参数化列表&#xff1a;可以…

轻叶H5营销单页,让你的营销更加清爽高效

网络营销就是营销企业品牌形象、产品信息发布、优惠促销活动&#xff0c;最终目的就是争抢流量和客户。现在为了吸引流量&#xff0c;各种营销方式、广告玩法层出不穷&#xff0c;成本投入大&#xff0c;带来的转化不一定好。今天&#xff0c;我们要来讲一讲H5营销单页。 H5营销…

项目管理软件project下载安装配置图文教程

目录 前言 配置安装过程 总结 前言 Project是一种计划、组织和管理任务的工具&#xff0c;通常用于团队协作和项目管理。它可以帮助用户创建任务列表、分配任务、设置截止日期、跟踪进度、分析数据等。Project还可以生成各种报告&#xff0c;如甘特图、资源使用情况、任务分…

稀疏矩阵存储格式总结

稀疏矩阵是指矩阵中的元素大部分是0的矩阵&#xff0c;实际问题中大规模矩阵基本上都是稀疏矩阵&#xff0c;很多稀疏度在90%甚至99%以上,大规模的稀疏造成了大量无效数据的计算和存储资源占用&#xff0c;也无法有效的载入有限内存计算。因此我们需要有高效的稀疏矩阵存储格式…

SpringCloud:ElasticSearch之数据同步

elasticsearch中的酒店数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;elasticsearch也必须跟着改变&#xff0c;这个就是elasticsearch与mysql之间的数据同步。 1.思路分析 常见的数据同步方案有三种&#xff1a; 同步调用异步通知监听binlog 1.1.同…

Nacos配置中心的详解与搭建

Namespace 简介 用于进行租户粒度的配置隔离&#xff0c;不同的命名空间下&#xff0c;可以存在相同的 Group 或 Data ID 的配置 配置Namespace 点击nacos的命名空间——点击新建命名空间 开发环境【dev】测试环境【test】正式环境【prod】 DataID 简介 Data ID 通常用于…