【MySQL的存储过程】

news2024/11/15 8:29:03

目录

  • 一、存储过程的概述
    • 1、存储过程的定义
    • 2、存储过程的优点
  • 二、存储过程的步骤(==面试题==)
    • 1、创建存储过程
    • 2、存储过程的参数
  • 三、删除存储过程
  • 四、存储过程的控制语句
    • 1. 条件语句if-then-else ···· end if
    • 2. 循环语句while ···· end while


一、存储过程的概述

1、存储过程的定义

存储过程是一组为了完成特定功能的SQL语句集合。

存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

2、存储过程的优点

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

二、存储过程的步骤(面试题

1、创建存储过程

1)先用delimiter临时修改SQL语句结束符(由于存储过程中使用的语句均为;结尾,不能让这些语句切断了整个存储过程语句)

delimiter $$

2)使用 create procedure 创建存储过程

create database dznb$$
use dznb$$
create procedure proc1()
  begin
  create table dznb.dznb01 (id int ,name varchar(10),age int,hobby varchar(50));
  insert into dznb.dznb01 values (1,'zhangsan',20,'dancing');
  insert into dznb.dznb01 values (2,'lisi',22,'singing');
  select * from dznb.dznb01;
  end$$

在这里插入图片描述

创建存储的时候会自动生成表结构和内容
在这里插入图片描述
3)再用delimiter把SQL语句结束符改回分号

delimiter ;

4)使用 call [库名.]存储过程名 调用存储过程

call proc1

创建存储过程

delimiter $$						#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
create procedure proc()					#创建存储过程,过程名为proc,不带参数
-> begin								#过程体以关键字begin开始
-> select * from Store_Info;			#过程体语句
-> end $$								#过程体以关键字end结束
delimiter ;								#将语句的结束符号恢复为分号
##调用存储过程##
call proc;

##查看存储过程##

show create procedure [数据库.]存储过程名;		#查看某个存储过程的具体信息

show create procedure proc;

show procedure status [like '%proc%'] \G

查看某个存储过程的具体信息

show create procedure [数据库.]存储过程名;

在这里插入图片描述

以列的方式显示存储过程执行的命令

show procedure status [like '%proc%'] \G

在这里插入图片描述

2、存储过程的参数

IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)

OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

in 参数的使用

create procedure proc2(in input_name varchar(10))
    -> begin
    -> select * from dznb01 where name = input_name;
    -> end$$

 delimiter ;

在这里插入图片描述

call proc2('zhangsan')

在这里插入图片描述

在这里插入图片描述

out参数的使用

delimiter $$

create procedure proc3(in input_name varchar(10), out output_age int)

begin

select age into output_age from dznb01 where name = input_name;

end$$

delimiter ;

在这里插入图片描述

call proc3('lisi',@out_age);

select @out_age;

call proc3('zhangsan',@out_age);

select @out_age;

在这里插入图片描述

inout参数的使用

语法
 
create procedure [库名.]存储过程名(inout  参数名 参数数据类型)
begin
   select  字段 into  参数名  from  字段  where 字段 = 参数名;
end$$
 
/*调用*/
set 变量名 =;
call (变量名);               #传入传出参数值只能用变量
delimiter $$
#使用inout 定义的参数必须为同一类型,如二者都为int或varchar
create procedure proc4(inout myvar int)
begin
select age into myvar from test where id=myvar;
end$$

delimiter ;


#调用
set @inout_var = 1;

call proc4( @out_myvar);

select @out_myvar;

在这里插入图片描述

三、删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。
 
drop procedure if exists proc2;

在这里插入图片描述

四、存储过程的控制语句

利用传入参数向dznb01表中插入数据
delimiter $$
create procedure proc6(in input_id int, in input_name varchar(10), in input_age int, in input_hobby varchar(50))
begin
insert into dznb01 values (input_id, input_name, input_age, input_hobby);
end$$

delimiter ;
call proc6(3,'qian yang',100,'pig');
call proc6(4,'qian',50,'dog');

在这里插入图片描述

1. 条件语句if-then-else ···· end if

delimiter $$
create procedure proc7(in input_age int)
begin
if input_age > 25 then
update dznb01 set hobby = 'money' where id = 1 or id = 2;
else
update dznb01 set hobby = 'play' where id = 3 or id = 4;
end if;
end$$
delimiter ;

call proc7(50);
select * from dznb01;

call proc7(20);
select * from dznb01;

在这里插入图片描述在这里插入图片描述

2. 循环语句while ···· end while

#使用循环语句向表中插入数据
delimiter $$

create procedure proc9()
begin
declare i int;
set i = 1;
create table class28 (id int, name varchar(20));
while i <= 10000
do  insert into class28 values (i, concat('student',i));
set i = i + 1;
end while;
end$$
delimiter ;
call proc9;
select * from class28;

在这里插入图片描述

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

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

相关文章

微信小程序配合Tdesign实现验证码倒计时

效果 点击发送验证码后 实现 wxml <view class"userName"><view class"name">Code.<text>*</text></view><t-input placeholder"" value"{{code}}" type"number" bindchange"onP…

elasticsearch删除脏数据(根据指定字段删除数据)

场景 es中出现几条脏数据&#xff0c;现在要把这几条数据直接删掉 思路 找到要删除的脏数据&#xff0c;一般是根据id之类的字段来删除&#xff0c;因为id具有唯一性&#xff0c;其实和mysql差不多 执行 1、先查到该条记录&#xff08;注意我们这边使用的是 ticketId字段&…

vue中日,周,月,年时间选择器(基于elementui)

通过选择上面的选项展示选择不同的日期,周,月份,年份 因为项目中点击切换时需要传递不同的日期, 例如:日,即选择日期的00:00分-23:59 周:即选择当月的第三周,截取第三周的周一和第三周的周日为开始时间和截止时间传值 月,即选择月的第一天---选择月得最后一天传值 <templ…

【静态连接和动态连接】C/C++编程中的两种有效链接策略

一、静态连接和动态连接 链接分为两种&#xff1a;静态链接、动态链接。 1&#xff09;静态链接 静态链接&#xff1a;由链接器在链接时将库的内容加入到可执行程序中。 优点&#xff1a; 对运行环境的依赖性较小&#xff0c;具有较好的兼容性 缺点&#xff1a; 生成的程…

企业级微服务架构实战项目--xx优选-商品分类和搜索

一 商品分类和搜索 点击分类&#xff0c; &#xff08;1&#xff09;左侧显示商品分类&#xff0c;右侧显示对应商品分类下的商品列表 &#xff08;2&#xff09;如果商品分类下没有数据&#xff0c;则显示空内容

【正则表达式】匹配选择题、判断题

试卷文本 使用https://github.com/Minuhy/python_docx_export导出的word文档文本&#xff1a; 2022-2023学年第二学期期末课程考核试卷&#xff08;A1&#xff09;卷 课程名称&#xff1a; 分布式数据库HBase 考核形式&#xff1a; 上机考试 年级、专业、层次&#xff1…

【wireshark】rtp流分析

分析wifi下的rtp传输 选中一个udp传输 udp.dstport == 41447解码为rtp 右键 decode as 过滤某一条rtp流 udp.dstport == 41447 && rtp

vscode 加上c++11编译选项

问题描述 vscode 运行C11代码出现此错误 error This file requires compiler and library support for the ISO C 2011 standard. This support must be enabled with the -stdc11 or -stdgnu11 compiler options. 提示我们需要在编译命令中加一行选项&#xff0c;加入c11编译…

Java 17 版本的新特性

Java 17 版本的新特性 &#x1f497;Sealed类&#x1f497;Pattern Matching for instanceof&#x1f497; 垃圾回收器改进&#x1f497;Vector API&#x1f497; Switch表达式的增强&#x1f493;Sealed类的示例代码&#x1f493; Pattern Matching for instanceof的示例代码&…

若依ruoyi数据权限详解

若依ruoyi数据权限详解 什么是数据权限&#xff1f;若依使用数据权限的步骤&#xff1a;数据权限的原理 什么是数据权限&#xff1f; 简单的例子就是&#xff1a; 比如一张商品表goods&#xff0c;很多人添加数据&#xff0c;销售部的就可以看到这个数据&#xff0c;生产部的就…

SpringBoot整合FreeMarker生成word表格文件(使用FTL模板)

**一&#xff0c;什么是FreeMarker&#xff0c;FTL模板? ** FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 它不是面向最终用户…

chatgpt赋能python:Python虚拟环境

Python虚拟环境 Python是一种脚本语言&#xff0c;它被广泛应用于各种类型的开发项目中。在其应用中&#xff0c;Python常常需要运行在特定的环境下&#xff0c;而Python虚拟环境就是为此而设计。 什么是Python虚拟环境 Python虚拟环境是Python的一种开发环境&#xff0c;可…

堆排序+TopK问题——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;好久不见&#xff0c;停更了很长一段时间吧&#xff0c;最近小雅兰会开始慢慢更新起来的&#xff0c;下面&#xff0c;就进入小雅兰今天的分享的知识点吧&#xff0c;让我们一起进入堆的世界&#xff01;&#xff01;&#xff01; 堆排序——…

2023上半年软考系统分析师科目一整理-04

2023上半年软考系统分析师科目一整理-04 企业信息化 企业信息化 企业信息化工程是将( A )相结合&#xff0c;改善企业的经营、管理、产品开发和生产等各个环节&#xff0c;提高生产效率、产品质量和企业的创新能力&#xff0c;从而实现产品设计制造和企业管理的信息化、生产过…

vue 日期时间段选择器 返回年月日时分秒

只上核心代码 <el-form-item label"计划时间" width"100px"><el-date-pickerv-model"palanTime"type"datetimerange"range-separator"至"start-placeholder"开始日期"end-placeholder"结束日期&quo…

驱动开发DAY 7

代码&#xff1a; homework.h #ifndef __HOMEWORK_H__ #define __HOMEWORK_H__#define LED1_ON _IO(L,(0x1<<1)) #define LED1_OFF _IO(L,(0x1<<2)) #define LED2_ON _IO(L,(0x1<<3)) #define LED2_OFF _IO(L,(0x1<<4)) #define LED3_ON _IO(L,(…

【Hive】Hive开启远程连接及访问方法

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

UE5关于高亮显示物体轮廓线

描边材质如果是透明的话&#xff0c;不会显示描边&#xff0c;材质参数勾选【允许自定义深度写入】即可 材质参考这个文章&#xff1a;https://blog.csdn.net/Axiang_0123/article/details/121168272?ops_request_misc&request_id&biz_id102&utm_termUE%E6%9D%90…

多元分类预测 | Matlab灰狼算法(GWO)优化极限学习机(ELM)的分类预测,多特征输入模型。GWO-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | 灰狼算法(GWO)优化极限学习机(ELM)的分类预测,多特征输入模型。GWO-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出…

STM32 HAL库手动配置过程

手动配置HAL库与配置固件库工程类似 1、首先新建四个文件夹 2、打开keil5&#xff0c;新建新工程在Project文件夹中 按开发板选择芯片 3、添加hal相关库到工程目录Libraries下 4、在User下新建main.c 5、在工程配置中新建5个组 6、将对应文件添加到工程中 添加启动文件到STAR…