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

MySQL---存储过程

存储过程的相关概念

是一组为了完成特定功能的sql语句的集合,类似于函数

写好了一个存储过程之后,我们可以像函数一样随时调用sql的集合。

复杂的,需要很多sql语句联合执行完成的任务

存储过程再执行上比sql语句的执行速度更快,效率也更高。

存储过程的优点

  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率。
  • SQL语句加上控制语句的集合,灵活性高。
  • 在服务器端存储,客户端调用时,降低网络负载。
  • 可多次重复被调用,可随时修改,不影响客户端调用。
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限。

存储过程的管理

存储过程的创建过程:

 ##创建存储过程:DELIMITER $$                  #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)CREATE PROCEDURE Proc ()      #创建存储过程,过程名为Proc,不带参数-> BEGIN                      #过程体以关键字BEGIN开始-> select * from store_info;  #过程体语句-> END $$                     #过程体以关键字END结束​DELIMITER;                    #将语句的结束符号恢复为分号

delimiter $$ #将语句的结束符号从分号临时改变成两个$$

create procedure proc () #创建存储过程proc:存储过程的名称。不能重复在当前库中唯一。括号里面不定义任何方法。

begin #过程体开始的关键字。begin后面跟上的是需要执行的sql语句。

end $$ #表示整个语句结束,和上面的定义开始符号一一对应。

delimiter; #将结束语句的分号恢复。

delimiter的作用就是保证整个存储过程中的sql语句能够被完整执行。

调用存储过程

 格式: call 存储过程名称

call proc1;

查看存储过程 

 SHOW CREATE PROCEDURE [数据库.]存储过程名;  #查看某个存储过程的具体信息​SHOW CREATE PROCEDURE Proc;SHOW CREATE PROCEDURE Proc\G

show procedure status where db='kgc';
show procedure status like 'proc';
#查询当前库中有多少存储过程call proc;
#调用存储过程

drop procedure if exists proc;
#如果proc这个存储过程存在则删除

存储过程的使用

mysql> delimiter $$
mysql> create procedure proc2 ()-> begin-> insert into info2 values('小白','running','2002-7-11');-> select * from info2 ;-> delete from info2 where name='小刚';-> end $$
mysql> delimiter ;
mysql> call proc2;

给存储内容传参

存储过程中参数有三种运用的方式

  • IN 输入参数: 表示调用者向过程传入值。(传入值可以是字面量或变量)
  • OUT 输出参数: 表示过程向调用者传出值。(可以返回多个值)(传出值只能是变量)
  • INOUT 输入输出参数: 既表示调用者向过程传入值,又表示过程向调用者传出值。(值只能是变量)

驶入参数

delimiter $$                                  //修改sql的结束语句标志$$
create procedure test1 (in uname char(20) )   //指定传参的变量位uname  后面为变量位的数据类型
begin
select * from info where name = uname;        //以变量位where查询条件,进行查询
select * from info;                           //查看
end $$                                        //结束符
delimiter;call test1('郭琦');
#call 存储过程名(传参内容)#数据清晰和指定数据入库。分析数据行为。
传出参数
insert into info values(2,'郭琦',@num,'是');
#传出参数。调用存储过程内部的数据传出参数到info表中

输入和输出参数

delimiter $$
create procedure test3 (inout str varchar(10))
#定义了变量之后一定要定义数据类型是什么
BEGIN
select str;
#显示输入字符
set str = concat(str,'_ky32');
#让传入的字符串做一个拼接
select str;
#加工之后的字符串
end $$
delimiter;set @str='刘亚伟';
#先传参,在外部需要加上@
call test3(@str);update info set name=@str where id = 1;
#看一下加工后str的内容

in:先传入,定义变量的值,初始值 call test3 调用存储过程,把变量的值传入存储 @str=刘亚伟_ky32

存储过程中的控制语句

delimiter $$
create procedure test5 (inout num int)
BEGIN
if num >=10 then
set num=num-6;
else
set num=num*2;
end if;
#结束if语句的判断
select num;
end $$
delimiter;set @num=19;call test5(@num);update info set id = @num where score = 100;

调用多个参数

调用多个参数:范围的方式匹配,完成传参------写入表中

delimiter $$
create procedure test6 (inout score int,out grade varchar(15))
BEGIN
if score between 85 and 100 then
set grade = '优秀';
elseif score between 60 and 84 then
set grade = '一般';
else
set grade = '不及格';
end if;
select grade;
end $$
delimiter;set @score=90;call test6(@score,@grade);update info set score=@score,pass=@grade where id =1;

while:循环语句

delimiter $$
create procedure test7 (out rescult int)
BEGIN
declare a int;
declare i int;
#在过程体当中声明变量
set a=10;
set i=1;
while i<=10 do
set a=a+10;
set i=i+1;
#相当于i++
end while;
set rescult =a;
end $$
delimiter;set @rescult=90;call test7(@rescult);select @rescult;

注意点:在使用存储过程中,在内部变量不需要加@,外部使用和赋值要加@,引用变量,在存储过程begin之后声明变量。要用declare a int; declare i int; 声明变量要加数据类型。 要想使用存储过程里面的结果,必须要out才能传出参数。在声明存储变量时,要定义好参数的传参方式 in out inout
 

相关文章:

MySQL---存储过程

存储过程的相关概念 是一组为了完成特定功能的sql语句的集合&#xff0c;类似于函数 写好了一个存储过程之后&#xff0c;我们可以像函数一样随时调用sql的集合。 复杂的&#xff0c;需要很多sql语句联合执行完成的任务 存储过程再执行上比sql语句的执行速度更快&#xff0c…...

宠物社区系统宠物领养小程序,宠物救助小程序系统多少钱?

当前很多的宠物被抛弃和虐杀&#xff0c;它们没有选择权&#xff0c;我们强制性的把狗带进人类的生活中&#xff0c;然后又无情的抛弃&#xff0c;让它们无家可归&#xff0c;变成流浪狗&#xff0c;它们做错了什么&#xff1f;流浪动物被主人遗弃之后居无定所&#xff0c;时刻…...

d3.js

D3&#xff1a;Data-Driven Documents • 通过D3提供的接口来基于数据操控文档的各个图元。 标题对于D3(本讲解)最为重要的标签&#xff0c;主要操作的对象(画布) HTML - 导入D3.js D3.js作为JavaScript的外库&#xff0c;必须先将其导入&#xff0c;如&#xff1a; Python的…...

okhttp关于header修改

在项目开发中&#xff0c;需要和后台定义一些规则,比如一些请求头信息&#xff0c;Content-Type&#xff0c;User-Agent。不能使用默认的&#xff0c;那么就得我们自己配置全局的。 基于okhttp4.0以上版本修改步骤&#xff1a; 创建我们自己的MediaType, create已经被废弃 val…...

pytorch代码实现注意力机制之Flatten Attention

Flatten Attention 介绍&#xff1a;最新注意力Flatten Attention&#xff1a;聚焦的线性注意力机制构建视觉 Transformer 在将 Transformer 模型应用于视觉任务时&#xff0c;自注意力机制 (Self-Attention) 的计算复杂度随序列长度的大小呈二次方关系&#xff0c;给视觉任务…...

激光雷达和人工智能

几十年来&#xff0c;激光雷达一直是许多行业中非常有用的工具&#xff0c;但直到最近&#xff0c;随着人工智能&#xff08;AI&#xff09;解决方案的引入&#xff0c;我们才开始认识到它的真正潜力。激光雷达&#xff0c;又称光探测和测距&#xff0c;是一种遥感技术。它利用…...

【算法练习Day44】最长递增子序列最长连续递增序列最长重复子数组

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 最长递增子序列最长连续递增…...

STM32H743XX/STM32H563XX芯片烧录一次后,再次上电无法烧录

近期在使用STM32H563ZIT6这款芯片在开发板上使用正常&#xff0c;烧录到自己打的板子就遇到了芯片烧录一次后&#xff0c;再次上电无法烧录的问题。 遇到问题需要从以下5点进行分析。 首先看下开发板的原理图 1.BOOT0需要拉高。 2.NRST脚在开发板上是悬空的。这里我建议大家…...

21. 合并两个有序链表 --力扣 --JAVA

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 解题思路 判断特殊情况&#xff0c;如&#xff1a;两个列表中其中一个为空&#xff1b;创建一个初始节点用于返回&#xff1b;通过while循环来逐个遍历链表&#xff0…...

Linux 基本语句_10_进程

进程和程序的区别&#xff1a; 程序是一段静态的代码&#xff0c;是保存在非易失储存器上的制令和数据的有序集合&#xff0c;没有任何执行的概念&#xff1b;而进程是一个动态的概念&#xff0c;它是程序的一次执行过程&#xff0c;包括了动态创建、调度、执行和消亡的整个过程…...

矩阵起源加入 OpenCloudOS 操作系统开源社区,完成技术兼容互认证

近日&#xff0c;超融合异构云原生数据库 MatrixOne企业版软件 V1.0 完成了与 OpenCloudOS 的相互兼容认证&#xff0c;测试期间&#xff0c;整体运行稳定&#xff0c;在功能、性能及兼容性方面表现良好。 一、产品简介 矩阵起源 MatrixOrigin 致力于建设开放的技术开源社区和…...

3D物理模拟和视觉特效软件SideFX Houdini mac中文介绍

SideFX Houdini for mac是一款3D物理模拟和视觉特效软件&#xff0c;几乎所有好莱坞特效电影里的物理模拟&#xff0c;包括碎裂&#xff0c;烟尘&#xff0c;碰撞&#xff0c;火焰&#xff0c;流体等模拟&#xff0c;都看得到它的身影。其独特的节点式操作方式&#xff0c;尤其…...

GPT-4.0网页平台-ChatYY

ChatYY的优势&#xff1a; 1. 支持大部分AI模型&#xff0c;且支持AI绘画&#xff1a; 2. 问答响应速度极快&#xff1a; 3. 代码解析&#xff1a; 4. 支持文档解读&#xff1a; 5. PC、移动端均支持&#xff1a; 访问直达&#xff1a;ChatYY.com...

mysql,redis导入导出数据库数据

mysql 导出数据 导出整个数据库&#xff1a; mysqldump -u 用户名 -p 数据库名 > 导出文件.sql 例如&#xff0c;如果你的用户名是 root&#xff0c;数据库名是 mydatabase&#xff0c;你可以运行以下命令&#xff1a; mysqldump -u root -p mydatabase > 导出文件.sql…...

conda修改虚拟环境名称

conda 修改虚拟环境名称 conda 不能直接更改名称&#xff0c;但是可以通过克隆环境解决 新建环境&#xff08;克隆旧环境&#xff09; conda create --name 新环境名 --clone 旧环境名 删除原环境 conda remove --name 旧环境名 --all 查看现有环境 conda env list conda i…...

c语言,将奇数和偶数分类

题目&#xff1a;输入一个整数数组&#xff0c;实现一个函数&#xff0c;来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c;所有偶数位于数组的后半部分。 思路&#xff1a;像冒泡排序那样&#xff0c;相邻两个数比较&#xff0c;两个都是偶数则不…...

前端设计模式之【观察者模式】

文章目录 前言介绍实现优缺点应用场景后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端设计模式 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#…...

HTTPS安全相关-通信安全的四个特性-ssl/tls

230-TLS是什么 1.http不安全 由于 HTTP 天生“明文”的特点&#xff0c;整个传输过程完全透明&#xff0c;任何人都能够在链路中截获、修改或者伪造请求 / 响应报文&#xff0c;数据不具有可信性 &#xff1b; “代理服务”。它作为 HTTP 通信的中间人&#xff0c;在数据上下…...

并查集:Leetcode765 情侣牵手

n 对情侣坐在连续排列的 2n 个座位上&#xff0c;想要牵到对方的手。 人和座位由一个整数数组 row 表示&#xff0c;其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号&#xff0c;第一对是 (0, 1)&#xff0c;第二对是 (2, 3)&#xff0c;以此类推&#xff0c;最后…...

如何设计一个网盘系统的架构

1. 概述 现代生活中已经离不开网盘&#xff0c;比如百度网盘。在使用网盘的过程中&#xff0c;有没有想过它是如何工作的&#xff1f;在本文中&#xff0c;我们将讨论如何设计像百度网盘这样的系统的基础架构。 2. 系统需求 2.1. 功能性需求 用户能够上传照片/文件。用户能…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...