mysql中的存储过程
存储过程的作用:有助于提高应用程序的性能。存储过程可以不必发送多个冗长的SQL语句
废话不说多,直接实操
##实现num的相加
delimiter $$
CREATE PROCEDURE test1 ()
begindeclare num int default 0; -- 声明变量,赋默认值为0select num+20;end $$
delimiter ; --将结束符修改成;call test1(); -- 调用存储过程
drop procedure test1 --如果不需要此存储函数开源删除咯
set赋值操作
delimiter $$CREATE PROCEDURE test2 ()
begindeclare num int default 0;set num =50; -- 给num变量赋值select num;end $$
delimiter ;call test2();
into的使用方法
delimiter $$
CREATE PROCEDURE test3 ()
begindeclare num int default 0; select count(1) into num from t_student_info; --计算t_student_info表的个数用num来记录select num;
end $$
delimiter ;
drop procedure test3; 删除该存储函数
call test3();
if的使用
delimiter $$
CREATE PROCEDURE test4 ()
begindeclare id int default 1; declare class_name varchar(20);if id=1 thenset class_name='要多久你才可以爱上我!';elseif id=2 thenset class_name='不再让自己遗憾了';elseset class_name='不用想了,谁都不爱我,我只爱我自己';end if;select class_name;
end $$
delimiter ;call test4();
mysql> delimiter;
ERROR:
DELIMITER must be followed by a 'delimiter' character or string
使用delimiter;会报错,一定要带空格
定义一个输入参数
delimiter $$
CREATE PROCEDURE test5 (in id int)
begindeclare class_name varchar(20);if id=1 thenset class_name='我和xhell脚本的if不一样!';elseif id=2 thenset class_name='我和python中的if语法有一点带你不一样';elseset class_name='不用想了,不靠别人';end if;select class_name;
注:存储过程中声明了 class_name 变量并对其进行了赋值,但并没有通过 SELECT 语句来显示其值。你需要在存储过程末尾添加 SELECT class_name; 语句,以便在调用存储过程时返回 class_name 的值end $$
delimiter ;call test5(3);
case的使用
delimiter $$
CREATE PROCEDURE test6 (in month int,out season varchar(10))
begincase when month >=1 and month<=3 thenset season='spring';when month >=4 and month<=6 thenset season='summer';when month >=7 and month<=9 thenset season='autumn';when month >=10 and month<=12 thenset season='winter';end case;
end $$
delimiter ;call test6(9,@season); -- 定义会话变量来接收test8存储过程返回的值select @season;
@xxx:代表定义一个会话变量,整个会话都可以使用,当会话关闭(连接断开)时销毁
@@xxx:代表定义一个系统变量,永久生效。

while循环的使用
delimiter $$
CREATE PROCEDURE test7 (in count int)
begindeclare total int default 0;declare i int default 1;while i<=count doset total=total+i;set i=i+1;end while;select total;
end $$
delimiter ;call test7(10);

repeat的使用
delimiter $$
CREATE PROCEDURE test7 (count int) -- 默认是输入(in)参数
begindeclare total int default 0;repeat set total=total+count;set count=count-1;until count=0 -- 结束条件,注意不要打分号end repeat;select total;
end $$
delimiter ;call test8(10);使用 select total; 语句输出 total 的最终值。
total 是局部变量,只在该存储过程内部有效。
而 @total 是用户变量,可以在整个会话中使用和共享。

loop的使用
delimiter $$
CREATE PROCEDURE test9 (count int) -- 默认是输入(in)参数
begindeclare total int default 0; sum:loop -- 定义循环标识 set total=total+count;set count=count-1;if count < 1 thenleave sum; -- 跳出循环 end if;end loop sum; -- 标识循环结束 select total;end $$
delimiter ;call test9(10);
创建一张临时表:
create temporary table temp_table(id int,name varchar(10)
);
insert into temp_table values (1,'xiaoxiaowang');select * from temp_table ;
注意:临时表示查询不到的
show tables; -- 不会显示临时表的存在
测试存储过程创建临时表是可以查到的,但是在存储函数中是查看不到的,结果会报错:
create procedure pro1()
begincreate temporary table temp_table(id int);insert into temp_table values(1);select * from temp_table;
end;call pro1();
测试存储函数创建临时表
create function fun2()
returns int
begindeclare id int ;create table temp_table( id int);insert into temp_table values(1);select id from into id temp_table; return id;
end;
怎么查看自己创建了多少的存储过程????????????
SHOW PROCEDURE STATUS WHERE Db = 'your_database_name';
咱们的业务应该放到咱们的业务层,而不是把业务滞留到数据库来处理,将业务和数据库严重耦合在一起了!这是导致公司开发不使用存储过程的
相关文章:
mysql中的存储过程
存储过程的作用:有助于提高应用程序的性能。存储过程可以不必发送多个冗长的SQL语句 废话不说多,直接实操 ##实现num的相加 delimiter $$ CREATE PROCEDURE test1 () begindeclare num int default 0; -- 声明变量,赋默认值为0select num20;end $$ delimiter ; …...
07:串口通信二
串口编程 1、与波特率之相关的寄存器2、PCON寄存器3、SCON寄存器4、配置的代码分析5、向PC发送一段字符串6、PC机向单片机发送字符控制LED1灯的亮灭 1、与波特率之相关的寄存器 如图,与串口通信相关的寄存器主要是SCON和PCON寄存器。 2、PCON寄存器 SMOD࿱…...
识别视频中的人数并统计出来
目的: 使用Python和pysimpleguil以及opencv写一个统计人流量的软件。要求:1 加载选定的视频 2 通过形态学特征识别人,3统计人数并且在界面上显示出来,4 保存识别出人数的信息。 步骤 1: 安装必要的库 首先,确保你已经安装了Python。然后,安装PySimpleGUI和OpenCV。你可…...
【TypeDB 】机器学习和符号 AI 在机器人技术中的作用
机器学习和符号 AI 在机器人技术中的作用 煤油灯科技2022-06-29 14:23前言 机器人学是计算机科学中的一个多学科领域,致力于机器人的设计和制造,机器人在制造、太空探索和国防等行业都有应用。虽然该领域已经存在了 50 多年,但随着科幻小说成为现实,波士顿动力公司的Spot和…...
EPLAN 去掉PDF中的红色跳转标识
EPLAN PDF图纸导出后体验跳转标识会有红色标识,如何去掉呢?下面介绍一下方法: 此为现象: EPLAN 2.9的帮助文档里提示: 在导出的 PDF 文档中,跳转后的跳转目标现在通过红色的闪烁框进行标识。可能的跳转目…...
【car】深入浅出学习机械燃油车知识、结构、原理、维修、保养、改装、编程
汽车的五大总成通常是指发动机、变速器、前后桥、车架和悬挂系统。 发动机:是汽车的动力来源,负责将燃料的化学能转化为机械能,驱动汽车行驶。常见的发动机类型有内燃机(如汽油发动机、柴油发动机)和电动机࿰…...
语音识别概述
语音识别概述 一.什么是语音? 语音是语言的声学表现形式,是人类自然的交流工具。 图片来源:https://www.shenlanxueyuan.com/course/381 二.语音识别的定义 语音识别(Automatic Speech Recognition, ASR 或 Speech to Text, ST…...
勒索防御第一关 亚信安全AE防毒墙全面升级 勒索检出率提升150%
亚信安全信舷AE高性能防毒墙完成能力升级,全面完善勒索边界“全生命周期”防御体系,筑造边界勒索防御第一关! 勒索之殇,银狐当先 当前勒索病毒卷携着AI技术,融合“数字化”的运营模式,形成了肆虐全球的网…...
elementui 日历组件el-calendar使用总结
功能: 1.日历可以周视图、月视图切换; 2.点击月视图中日期可以切换到对应周视图; 3.点击周视图查看当日对应数据; 4.周、月视图状态下,点击前后按钮,分别切换对应上下的周、月; 5.点击回到…...
RK3568 安卓12 EC20模块NOCONN没有ip的问题(已解决)
从网上东拼西凑找了不少教程,但是里面没有提到rillib.so需要替换,替换掉就可以上网了,系统也有4G图标了。 注意,这个rillib.so是移远提供的。把他们提供的文件放到rk3568_android_sdk/vendor/rockchip/common/phone/lib下&#x…...
【NLP自然语言处理】基于BERT实现文本情感分类
Bert概述 BERT(Bidirectional Encoder Representations from Transformers)是一种深度学习模型,用于自然语言处理(NLP)任务。BERT的核心是由一种强大的神经网络架构——Transformer驱动的。这种架构包含了一种称为自注…...
CSS选择器(1)
以内部样式表编写CSS选择器,其主要编写在<head></head>元素里,通过<style></style>标签来定义内部样式表。 基本语法为: 选择器{ 声明块 } 声明块:是由一对大括号括起来,声明块中是一个一个的…...
Claude 3.5 Sonnet模型发布,对比ChatGPT4o孰强孰弱
Anthropic 这家生而为打击 OpenAI 安全问题的公司,正式发布了Claude 3.5 Sonnet模型! 用官网的话就是: 今天,我们推出了 Claude 3.5 Sonnet,这是我们即将推出的 Claude 3.5 型号系列中的第一个版本。Claude 3.5 Sonne…...
MySQL 分库分表
分表 分表 将表按照某种规则拆分成多个表。 分表的使用原因 当数据量超大的时候,B-Tree索引效果很变差。 垂直分区 切分原则:把不常用或存储内容比较多的字段分到新的表中可使表存储更多数据。 原因,Innodb主索引叶子节点存储着当前行的所有信…...
AutoMQ 社区双周精选第十二期(2024.06.29~2024.07.12)
本期概要 欢迎来到 AutoMQ 第十一期双周精选!在过去两周里,主干动态方面,AutoMQ 跟进了 Apache Kafka 3.4.x BUG 修复,并进行了CPU & GC 性能优化,另外,AutoBalancing 的 Reporter 和 Retriever 也将支…...
Web开发:<div>标签作用
div作用 介绍基本用法特点和用途样式化示例嵌套示例与其他标签的对比总结 介绍 在Web开发中,<div> 标签是一个通用的容器元素,用于将HTML文档中的内容分组。它是一个块级元素,通常用于布局目的,因为它可以包含其他块级元素…...
如何使用unittest框架来编写和运行单元测试
Python 的 unittest 框架是用于编写和运行可重复的测试的一个强大工具。它允许你定义测试用例、测试套件、测试运行器和测试固件(fixtures),从而系统化地测试你的代码。以下是如何使用 unittest 框架来编写和运行单元测试的基本步骤ÿ…...
2024最新超详细SpringMvc常用注解总结
SpringMVC常用注解 控制器(Controller)相关注解: 1.Controller Controller 注解用于标识一个类为 Spring MVC 的控制器,它能够处理用户的请求并返回相应的视图或数据。通常与 RequestMapping 注解一起使用,以定义请求…...
Linux硬件中断(IRQ)的基础知识
目录 一、中断的概念1.1 什么是硬件中断1.2 中断类型二、中断处理的工作原理2.1 中断请求2.2 中断向量2.3 中断服务例程(ISR)2.4 上下文切换2.5 中断处理2.6 任务恢复三、中断处理的编程3.1 注册中断处理函数3.2 注销中断处理函数四、中断和系统性能4.1 中断风暴4.2 IRQ亲和性…...
DP讨论——适配器模式
学而时习之,温故而知新。 敌人出招(使用场景) 说是自己的程序对接第三方的库,但是自己的代码的接口设计完毕了,如何对接上? 你出招 适配器模式就是为此而生的——我觉得应该是该解决方法被命名为了适配…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
