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

数据库强化(3.存储过程)

1.什么是存储过程?

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。MySQL 5.0 版本开始支持存储过程。
它是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

2.存储过程的优缺点?

存储过程的优点主要包括:
执行速度快:存储过程在创建时,数据库已经对其进行了解析和优化,并且存储过程一旦执行,会在内存中保留一份,直接从内存中调用,因此执行速度更快。
减少网络传输:存储过程直接在数据库服务器上运行,所有的数据访问都在数据库服务器内部进行,不需要将数据传输到其他服务器,从而减少了一定的网络传输。
可维护性:存储过程比程序更容易维护,因为可以实时更新DB端的存储过程,一些bug可以直接在存储过程中修改业务逻辑。
增强安全性:通过存储过程可以保证数据的安全性和完整性,没有权限的用户可以在控制之下间接地存取数据库,从而保证数据的安全。
可扩展性:应用程序和数据库操作分开进行,独立进行扩展和DBA维护优化。
存储过程的缺点主要包括:
移植问题:数据库端代码与数据库相关,如果是做工程型项目,基本不存在移植问题。
调试困难:一旦出现错误,很难找到问题所在。
写法复杂:需要掌握SQL语句的编程,写法比普通的SQL语句更复杂。
不易维护:如果业务逻辑发生变化,需要修改存储过程,而存储过程的修改比程序更复杂。
性能问题:如果存储过程过于复杂,会影响数据库的性能。

3.创建存储过程

CREATE PROCEDURE procedure_name  
[(parameter1 datatype1, parameter2 datatype2, ...)]  
AS  
BEGIN  -- 存储过程的具体实现  
END;

其中,procedure_name 是存储过程的名称,参数列表中的 parameter1, parameter2, … 是存储过程的参数,datatype1, datatype2, … 是参数的数据类型。在存储过程的具体实现中,可以使用SQL语句和其他编程语言元素来实现存储过程的逻辑。
例如,下面是一个简单的存储过程示例,它接受一个整数参数并返回该参数的平方:

CREATE PROCEDURE SquareNumber (IN num INT, OUT result INT)  
AS  
BEGIN  SET result = num * num;  
END;

在这个示例中,SquareNumber 是存储过程的名称,num 是输入参数,result 是输出参数。存储过程中的 SET 语句将输入参数 num 的平方赋值给输出参数 result。

4.调用存储过程

CALL procedure_name([parameter1, parameter2, ...]);

其中,procedure_name 是存储过程的名称,参数列表中的 parameter1, parameter2, … 是存储过程的参数,用逗号分隔。如果存储过程有输出参数,则需要在调用时指定输出参数的变量名。

例如,在上面的示例中,要调用存储过程 SquareNumber 并传入一个整数参数 5,并将结果存储在变量 result 中,可以使用以下语句

DECLARE @result INT;  
CALL SquareNumber(5, @result);  
SELECT @result;

这将返回变量 result 中的值,即 25。

5.删除存储过程

DROP PROCEDURE procedure_name;

其中,procedure_name 是要删除的存储过程的名称。执行此语句将删除存储过程及其相关代码。请注意,在删除存储过程之前,请确保您不再需要使用它,并且已经备份了任何重要的代码或逻辑。

6.查看存储过程

  1. 使用SHOW STATUS语句查看存储过程的状态,基本语法形式如下:SHOW PROCEDURE STATUS [like ‘pattern’]。参数PROCEDURE表示查询存储过程,参数LIKE 'pattern’用来匹配存储过程的名称。例如,要查看名为proc_delete_student的存储过程的状态,可以执行以下语句:SHOW PROCEDURE STATUS LIKE ‘proc_delete_student’。
show procedure status;
  1. 使用SHOW CREATE语句查看存储过程的定义,基本语法形式如下:SHOW CREATE PROCEDURE proc_name。其中,参数PROCEDURE表示查询存储过程,参数proc_name表示存储过程的名称。例如,要查看名为proc_delete_student的存储过程的定义,可以执行以下语句:SHOW CREATE PROCEDURE proc_delete_student。
  2. 查询information_schema数据库下的Routines表来查看存储过程的信息。

相关文章:

数据库强化(3.存储过程)

1.什么是存储过程? 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。MySQL 5.0 版本开始支持存储过程。 它是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中&a…...

雅思小作文笔记

mostly from Simon’s methods and techniques remember the task is describe what you see, not give an opinion. Just write a report.no conclusion, just a summary(the overview) Question type 小作文的题目类型大致如上 Simon所述,在描述数字的时候&…...

Java List Set Map

一、List 1.1 ArrayList 1.2 LinkedList 二、Set 2.1 HashSet 2.2 TreeSet 2.3 LinkedHashSet 三、Map 3.1 HashMap 3.2 TreeMap 3.3 LinkedHashMap 四、对比 类型底层结构重复null值场景备注查询删除新增ListArrayList动态数组可允许快速随机访问元素0(1)0(n)尾部增加0&a…...

【数据结构】数组和字符串(十三):链式字符串的基本操作(串长统计、查找、复制、插入、删除、串拼接)

文章目录 4.3 字符串4.3.1 字符串的定义与存储4.3.2 字符串的基本操作(链式存储)1. 结构体2. 初始化3. 判空4. 串尾添加5. 打印6. 串长统计7. 查找8. 复制9. 插入10. 删除11. 串拼接12. 销毁13. 主函数14. 代码整合 4.3 字符串 字符串(String)是由零个或…...

Python3 获取当前服务器公网 IP 地址

有同学问我如何使用 Python 获取服务器公网的 IP 地址呢?我测试几个发现,方法有很多,好用的就发现一种,即直接使用 Python 自带的 socket 包。 代码示例: # 获取主机 IP dgram socket.socket(socket.AF_INET, socke…...

EAS查前5分钟到现在的组织变动数据

select * from T_ORG_Admin where ( (FCREATETIME between ( sysdate-(1/24/60)*8) and sysdate ) or (FLASTUPDATETIME between ( sysdate-(1/24/60)*8) and sysdate ) ) -- FLASTUPDATETIME < sysdate-(1/24/60)*10 --FNUMBER 110112...

uni-app——如何阻止事件冒泡

引言 在开发移动应用程序时&#xff0c;我们经常需要处理用户交互事件。然而&#xff0c;有时候这些事件会冒泡&#xff0c;导致意外的行为和不良用户体验。在本文中&#xff0c;我们将探讨如何使用UniApp框架来阻止事件冒泡&#xff0c;并提供一些示例代码来帮助您理解如何实…...

[MySQL]索引

目录 概念解释 作用/优点 缺点 适用场景 索引的创建,删除与查看 系统对索引的自动创建 索引建立的时机 索引存储的数据结构 选择B树的原因 B树的原理 查询流程 优点 B树 与B树的区别 优点 概念解释 索引就像是一本字典的目录,我们可以根据目录快速定位到我们想…...

什么是AUTOSAR ComStack,AUTOSAR架构中,CAN通信堆栈CAN Communication Stack介绍

AUTOSAR&#xff08;Automotive Open System Architecture&#xff09;ComStack指的是AUTOSAR架构中的通信堆栈。在AUTOSAR体系结构中&#xff0c;ComStack是指用于不同软件组件&#xff08;如应用软件、基础软件等&#xff09;之间进行通信的一组协议和服务。 在AUTOSAR架构中…...

黄金期货与黄金现货的区别

黄金期货与黄金现货是有区别的&#xff0c;比如在交易机制方面&#xff0c;黄金期货有具体的交割日&#xff0c;合约到期就必须交割&#xff0c;否则会被强行平仓或以实物进行交割&#xff0c;而在保证金不足时也会被强行平仓&#xff1b;而现货黄金就没有交割限制&#xff0c;…...

【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表e. 压缩稀疏行&#xff08;Compressed Sparse Row&#xff0c;CSR&#xff09;矩阵结构体创建CSR矩阵元素设置初始化打印矩阵销毁…...

springboot整合postgresql

使用docker安装postgres 简单起见&#xff0c;这里用docker来安装postgresql docker pull postgresdocker run --name postgres \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v /usr/local/docker/postgresql/data:/var/lib/postgresql/data \-d postgrespostgres客户端 pg…...

C#__委托delegate

委托存储的是函数的引用&#xff08;把某个函数赋值给一个委托类型的变量&#xff0c;这样的话这个变量就可以当成这个函数来进行使用了&#xff09; 委托类型跟整型类型、浮点型类型一样&#xff0c;也是一种类型&#xff0c;是一种存储函数引用的类型 using System.Reflec…...

Jupyter Notebook的安装方法以及生成ipykernel

1. 安装Python和pip Jupyter Notebook是基于Python的&#xff0c;因此首先需要在电脑上安装Python和pip。可以通过访问Python官网(Welcome to Python.org)下载安装包进行安装。在安装Python的过程中&#xff0c;会提示是否安装pip&#xff0c;选择安装即可。 2. 安装Jupyter …...

测试员如何快速复现bug?一款合适的视频录制软件了解一下

你是不是还在为描述缺陷复现步骤而苦恼&#xff1f;你是不是还在为寻找一款合适的视屏录制软件而挣扎&#xff1f;那么&#xff0c;你应该好好看看这篇小文章。 作为测试人员&#xff0c;撰写测试用例、提交测试缺陷是基本工作。但往往我们会遇到&#xff1a;开发人员无法根据…...

论文-分布式-并发控制-并发控制问题的解决方案

目录 参考文献 问题 解法与证明 易读版本 参考文献 Dijkstra于1965年发表文章Solution of a Problem in Concurrent Programming Control&#xff0c;引出并发系统下的互斥(mutual exclusion)问题&#xff0c;自此开辟了分布式计算领域Dijkstra在文中给出了基于共享存储原子…...

【网络协议】聊聊http协议

当我们输入www.baidu.com的时候&#xff0c;其实是先将baidu.com的域名进行DNS解析&#xff0c;转换成对应的ip地址&#xff0c;然后开始进行基于TCP构建三次握手的连接&#xff0c;目前使用的是1.1 默认是开启了keep-Alive。可以在多次请求中进行连接复用。 HTTP 请求的构建…...

图神经网络论文笔记(一)——北邮:基于学习解纠缠因果子结构的图神经网络去偏

作者 &#xff1a;范少华 研究方向 &#xff1a;图神经网络 论文标题 &#xff1a;基于学习解纠缠因果子结构的图神经网络去偏 论文链接 &#xff1a;https://arxiv.org/pdf/2209.14107.pdf        https://doi.org/10.48550/arXiv.2209.14107 大多数图神经网络(GNNs)通…...

java初始化list的几种方式

在Java中初始化List有以下几种常见的方式: 使用Arrays.asList()静态方法: List<Integer> list1 Arrays.asList(1, 2, 3);使用List接口的实现类ArrayList的构造函数: List<String> list2 new ArrayList<>();使用Collections.singletonList() String obj…...

Linux:文件操作

目录 一、关于文件 1、文件类的系统接口 2、文件的含义 二、文件操作 1、C语言文件相关接口 2、系统接口 open close write read 三、文件描述符 关于fd fd的分配规则 输出重定向示例 输入重定向示例 追加重定向示例 dup2函数 缓冲区 stdout与stderr perror…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...