MySQL 存储过程(一)

本篇主要介绍MySQL存储过程的相关内容

目录

一、什么是存储过程?

二、基本语法 

创建存储过程

调用存储过程 

 查看存储过程

删除存储过程

三、变量

系统变量

用户自定义变量

局部变量

四、存储过程的参数

in

out

inout


一、什么是存储过程?

存储过程是存储在数据库的一组已经事先经过编译的SQL语句集合,客户端可以直接调用存储过程来减少与服务端进行IO的次数,从而减少网络IO的次数,从而提高性能。存储过程主要包含如下三个特点:

  • 封装和复用:存储过程对一组SQL进行了封装,需要使用时直接进行调用
  • 能够进行参数交互:存储过程可以接收参数,也可以传递返回值
  • 减少网络IO:对于多组SQL语句的执行,只要只要进行一次网络IO就能完成

二、基本语法 

下面我们来了解一下存储过程的基本语法。

创建存储过程

创建存储过程的语法如下:

create procedure 存储过程名称([参数列表])

begin

 --sql语句

end;

在定义sql语句时,可能会需要用到‘;’,这就可能导致存储过程还没创建好就提前结束了,因此我们需要通过 delimiter 来将结束符改为其它字符,定义完成存储过程之后,再改回原来的‘;’。 

调用存储过程 

 调用存储过程的基本语法如下:

call 存储过程名称(参数列表)

 查看存储过程

我们可以查看指定数据库的存储过程及其状态,语法如下:

 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = '数据库名称';

我们还可以查看完整的存储过程,即存储过程的创建语句,具体语法如下:

show create procedure 存储过程名 

删除存储过程

删除存储过程的语法如下:

drop procedure [if exits] 存储过程名 

三、变量

在MySQL中,变量可以分为三种类型,系统变量,用户自定义变量和局部变量,下面让我们来具体了解一下。

系统变量

系统变量可以分为两种,一种是会话级的系统变量,一种是全局的系统变量。会话级的系统变量只是针对于当前会话生效,而全局系统变量则是对所有会话都生效,下面我们来看一下系统如何查看。查看系统变量有两种方式,一种是通过show,一种是通过select。

通过show我们可以查看当前系统全部的系统变量,具体语法如下:

show [session,global] variables;

其中session表示会话级系统变量,意为查看当前会话生效的系统变量,global则是查看所有会话生效的系统变量 。

 我们还可以对变量进行模糊匹配:

show [session,global] variables like '需要模糊匹配变量名片段’;

用select 可以查看指定系统变量的值,具体语法如下:

select  @@[session| global] 系统变量名;

我们也可以对系统变量进行修改,修改系统变量的语法有两种,具体如下:

 set @@[session | global] 系统变量名 = 值;

 set [session | global] 系统变量名 = 值;

其中session表示当前修改只对当前会话生效,而global则对所有会话都生效。

(在前面的语句中,如果没有指定为session或global,则默认为session

用户自定义变量

在MySQL中,我们可以根据自己的需求来自定义一些变量,创建自定义变量有如下两种方式:

方式一:通过set创建

set @变量名 = 值 [,@变量名 = 值,.....];

set @变量名 := 值 [,@变量名 = 值,.....];

方式二: 通过select创建

select @变量名 := 值 [,@变量名 = 值,.....];

select 字段名 into @var_name from 表名;

查看 自定义变量的语法如下:

select @变量名;

下面我们来尝试创建一个自定义变量test 

 

可以发现创建成功了,我们再来查看一下:

可以发现test的值被成功查到了。 

 需要注意的是,我们自定义的变量,只在当前会话生效。

局部变量

局部变量是指定义在存储过程中的变量,它只在存储过程中生效,可以作为存储过程的接收参数,或者返回参数等。

创建局部变量的语法如下:

declare 变量名 变量类型 [default ... ] ;

其中,default为局部变量的默认值,局部变量需要设置类型,常见的类型有:

int 、 bigint、char 、varchar 、date 、time等。

我们可以通过set给局部变量进行赋值,具体如下:

set 变量名 = 值;

set 变量名 := 值; 

四、存储过程的参数

前面我们说过存储过程是可以有参数的,下面我们来具体了解一下存储过程的参数。 

存储过程的参数有三种类型,分别如下:

  • in : 作为输入参数,用来接收外部传入到存储过程的值。
  • out : 作为输出参数,函数过程执行完后将该参数的值返回给存储过程的调用者。
  • inout:该类型的参数既作为输入参数又作为输出参数。

下面,让我们来具体演示一下这三种参数。

in

首先,我们创建存储过程p1,并为其设置一个in类型的int数据类型的sorce参数:

此时我们,我们调用一下这个存储过程,并传入一个数值:

 

可以发现调用成功了。

如果我们不传值,则会报错:

out

我们在创建一个存储过程p2,以int数据类型的ret作为out类型的参数,然后在存储过程的begin ->end中给out赋值(需要现修改结束符):

 

接下来,我们调用p2,需要往p2中传入一个变量来接收p2的返回值,具体如下:

然后我们再来查看一下@test的值 

可以发现值正是p2返回的1。

inout

我们再创建存储过程p3,并设置一个inout类型参数num,然后让num翻10倍

然后我们调用p3,此时我们需要传入一个变量,num既会去接收这个变量的值作为传入参数,又会在函数过程结束后作为返回值返回给该变量 。接下来我们传入前面的test变量(值为10)

然后我们再来查看一下test的值 :

可以发现test的值已经翻了10倍了。 

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

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

相关文章

python中的while循环

没有循环时,想打印0-100之间的数字,则需要循环多次,例: print(0) print(1) print(2) print(3) ... print(99) 但是使用循环的话,就不会有那么麻烦 while 循环 while 这个单词有“在……时”的含义,whil…

【UnityShader入门精要学习笔记】第十七章 表面着色器

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 表面着色器…

2024年手机能做的赚钱软件有哪些?整理了八个手机能做的正规赚钱软件分享

在这个指尖滑动的时代,手机不仅仅是通讯工具,更是我们探索财富的钥匙。你是否曾幻想过,躺在沙发上,轻轻一滑,就能让钱包鼓起来? 今天,就让我们一起来探索那些隐藏在手机里的赚钱秘笈&#xff0c…

使用 Vue 3 和 vue-print-nb 插件实现复杂申请表的打印

文章目录 1:创建 Vue 3 项目2:安装 vue-print-nb 插件3:配置 vue-print-nb 插件4:创建一个复杂的申请表5:使用 ApplicationForm 组件6:运行项目 在开发管理系统或申请表打印功能时,打印功能是一…

光伏无人机踏勘需要使用哪些设备?用到哪些原理?

随着全球能源结构的转型和绿色能源的大力推广,光伏电站的建设和运维正成为能源领域的热点。然而,光伏电站的选址、建设和后期运维过程中,往往面临着地形复杂、设备分散、巡检难度大等挑战。在这一背景下,无人机踏勘技术以其独特的…

qt程序打包成一个exe

首先在release模式下编译然后用windeployqt打包 具体步骤参照我这篇文章: https://blog.csdn.net/weixin_73548574/article/details/134932044 然后使用一个加壳工具:https://enigmaprotector.com/en/downloads.html 下载安装后打开 到此完成&#…

数仓建模—指标拆解和选取

数仓建模—指标拆解和选取 第一节指标体系初识介绍了什么是指标体系 第二节指标体系分类分级和评价管理介绍了指标体系管理相关的,也就是指标体系的分级分类 这一节我们看一下指标体系的拆解和指标选取,这里我们先说指标选取,其实在整个企业的数字化建设过程中我们其实最…

进程和任务管理器

一、查看和控制进程 1.1ps命令 (1)ps 命令——查看静态的进程统计信息(Processes Statistic) PID TTY TIME CMD 1579 pts/1 00:00:00 bash 1730 pts/1 00:00:00 ps PID:进程IDTTY (进程id&#xff0…

微信小程序发布遇到的一些问题记录

1.报错组件没有按需导入 在该路径配置微信小程序添加"lazyCodeLoading" : "requiredComponents" "mp-weixin" : { "appid" : "你的appid", "setting" : { "urlCheck" : f…

ElementUI中date-picker组件,怎么给选择一个月份范围中大写月份改为阿拉伯数组月份(例如:一月、二月,改为1月、2月)

要将 Element UI 的 <el-date-picker> 组件中的月份名称从中文大写&#xff08;如 "一月", "二月"&#xff09;更改为阿拉伯数字&#xff08;如 "1月", "2月"&#xff09;&#xff0c;需要进行一些定制化处理。可以通过国际化&a…

企业微信接入系列-上传临时素材

企业微信接入系列-上传临时素材 文档介绍上传临时素材写在最后 文档介绍 创建企业群发的文档地址&#xff1a;https://developer.work.weixin.qq.com/document/path/92135&#xff0c;在创建企业群发消息或者群发群消息接口中涉及到上传临时素材的操作&#xff0c;具体文档地址…

网络服务DHCP的安装

DHCP的安装 检查并且安装dhcp有关软件包 rpm -qc dhcp #检查是否存在dhcp yum install -y dhcp #进行yum安装查看系统的配置文件 切换到对应目录查看相关文件配置&#xff0c;发现是空目录。 将官方提供的example复制到原配置文件中 cp /usr/share/doc/dhcp-4.2.5/dhcpd.…

什么是室内外一体化定位

室内外一体化定位是一种技术&#xff0c;它允许在室内外环境中对设备或人员进行连续、无缝的定位跟踪。这种技术结合了多种定位技术的优势&#xff0c;以克服单一技术在室内外环境中可能遇到的局限性。 室内外一体化定位通常涉及以下几种技术&#xff1a; 1. 卫星定位系统&am…

手撕C语言题典——相交链表

目录 前言 一&#xff0c;思路 1&#xff09;暴力 2)同步指针 二&#xff0c;代码实现 前言 依旧是力扣上的一道题&#xff0c;有许多新思路提供给我们 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/intersection-of-two-linked-li…

Message passing mechanism (消息传递机制)

objc_msgSend 是 Objective-C 运行时系统中的一个核心函数&#xff0c;用于实现消息传递机制。在 Objective-C 中&#xff0c;方法调用实际上是消息传递的过程&#xff0c;当你在代码中调用一个方法时&#xff0c;编译器会将其转换为 objc_msgSend 函数的调用。 objc_msgSend …

构建体育直播平台源码:深度解析数据分析模块的核心展示内容

在现代的体育直播平台中&#xff0c;数据分析展示已经成为不可或缺的一部分。如下参考借助“东莞梦幻网络科技”提供的体育直播源码&#xff0c;打造的平台&#xff0c;并通过表格形式为用户列出以下数据分析内容&#xff1a; 1、积分排名&#xff1a;反映了各支队伍在赛季中的…

做跨境电商一定要测评吗?

不管是做亚马逊还是虾皮、Lazada、ebay、沃尔玛、Ozon、Allegro、敦煌网、Jumia、Falabella、SHEIN、OnBuy、新蛋、Fnac、eMAG、ManoMano、Fruugo、速卖通、阿里国际、煤炉等跨境电商平台&#xff0c;测评都是成本最低且最有效的一种推广方式 并不是说做电商就一定要去测评&am…

护肤品成分大公开

在追求美丽的道路上&#xff0c;护肤品无疑是我们手中的重要武器。而在这众多护肤品中&#xff0c;胶原蛋白这一成分因其独特的功效和作用&#xff0c;受到了广泛的关注和喜爱。今天&#xff0c;就让我们一起走进胶原蛋白的世界&#xff0c;揭开它的神秘面纱。 一、胶原蛋白是什…

React实现在线预览word报告/本地选择报告预览

标题使用的核心技术点是docx-preview&#xff0c;读取到文件的File对象&#xff0c;用File去做文件展示&#xff0c;这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中&#xff08;上zip已包…

shell 终端打印格式化日志 log::info

代码 logging.sh #!/bin/bash NC\033[0m RED\033[31m GREEN\033[32m YELLOW\033[33m BLUE\033[34mlog::err() {printf "[$(date %Y-%m-%dT%H:%M:%S.%2N%z)][${RED}ERROR${NC}] %b\n" "$" }log::info() {printf "[${GREEN}$(date %Y-%m-%dT%H:%M:%S.%…