【MySQL】MySQL存储过程与存储函数实战(MySQL专栏启动)

news/2024/11/20 1:45:59/

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 CSDN博客专家 | CSDN后端领域优质创作者 | CSDN内容合伙人 | 2022博客之星

🏆 InfoQ(极客)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 


🍅 文末获取联系 🍅  👇🏻 精彩专栏推荐订阅收藏 👇🏻
        

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文目录

本文导读

一、存储过程与存储函数

1、什么是存储过程和存储函数

2、存储过程和存储函数的使用场景

3、存储过程和存储函数的优缺点

二、存储过程实战

1、创建存储过程

2、查看存储过程

3、修改存储过程

4、删除存储过程

三、存储函数实战

总结


本文导读

存储过程(Stored Procedure)和存储函数(Stored Function)是指存储在数据库中供所有用户调用的子程序。它们预先编译并存储在数据库系统中。本文讲解全面讲解其特性与优缺点,并附以实战解析。

一、存储过程与存储函数

1、什么是存储过程和存储函数

存储过程(Stored Procedure)和存储函数(Stored Function)是指存储在数据库中,供所有用户调用的程序(当用户通过指定存储程序的名字来调用才会执行),它们已经被预先编译并存储在数据库系统中。因此,调用存储过程和存储函数来完成业务逻辑可以提高性能。

与存储过程一样,存储函数是在数据库中定义的SQL语句的集合。存储函数可以通过return语句返回函数值,该语句主要用于计算和返回值。存储过程不直接返回值,主要用于执行操作(存储过程没有 return,通过 out 参数来指定返回值)。

在MySQL中,使用 CREATE FUNCTION 语句创建存储函数,使用 CREATE PROCEDURE 语句创建存储过程。

2、存储过程和存储函数的使用场景

存储过程有些开发规范中不推荐,同时对开发人员编写存储过程的要求稍高,但这并不影响存储过程的广泛使用。使用存储过程不仅可以提高数据库的访问效率,还可以提高数据库使用的安全性。

一般在执行SQL之前,需要编译常见数据库操作的SQL语句,这里面存储过程以另一种方式执行SQL语句。

存储过程是一种可编程函数,它是在数据库中创建和保存的,通常由SQL语句和一些特殊的控制结构组成。当您希望在不同的应用程序或平台上执行相同的特定功能时,存储过程尤其适用。

使用存储过程的目的是预先使用SQL语句编写常见或复杂的工作,并使用指定的名称存储。这个过程被编译、优化并存储在数据库服务器中,因此被称为存储过程。当数据库将来需要提供与定义的存储过程具有相同功能的服务时,只需调用“call存储过程名称”即可自动完成。

存储过程可用于转换数据、迁移数据和生成报告。它类似于编程语言。一旦成功执行,就可以随时调用它来完成指定的函数操作。

3、存储过程和存储函数的优缺点

存储过程的优点:

1、封装性:存储过程完成一个功能需要多个SQL语句,并且可以在语句之间传递参数。因此,编写逻辑函数相对更复杂。存储过程可以将这些SQL语句包含在一个独立的单元中,这样外部看不到复杂的SQL语句,只有简单的调用才能实现目标。数据库专业人员可以随时修改存储过程,而不会影响调用它的应用程序源代码。

2、灵活性:存储过程可以用过程控制语句编写,并且具有很强的灵活性来完成复杂的判断和更复杂的操作。

3、减少网络IO:存储过程在服务器端运行,执行速度很快。因此,当在客户端计算机上调用存储过程时,仅在网络中传输调用语句,这可以减少网络负载。

4、高性能:当存储过程被编译后存储在数据库服务器中,MySQL客户端可以直接调用它,这样所有SQL语句都将从服务器执行,从而提高性能。但是存储过程不是越多越好,过多使用存储过程将影响系统性能。

5、安全性:存储过程作为接口提供给外部程序

6、数据独立性:当数据表的结构发生变化时,不需要修改程序,只有需要重写存储过程。

存储过程的缺点:

1、调试很麻烦

2、存在迁移问题

3、重新编译问题,因为后端代码是在运行之前编译的。如果具有引用关系的对象发生更改,则需要重新编译受影响的存储过程和包

4、如果在程序系统中使用了大量存储过程,当程序交付使用时,数据结构将随着用户需求的增加而改变,随之而来的是系统的相关问题。如果想要维护系统,成本高且维护麻烦。

二、存储过程实战

1、创建存储过程

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>

过程名:存储过程的名称。即 db_name.sp_name,尽量避免选择与MySQL内置函数相同的名称,否则将报告错误(建议使用业务名称)。

过程参数:存储过程可以没有参数(仍需要在存储过程的名称后面添加一对括号),也可以有一个或多个参数。MySQL存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,这些参数由三个关键字标识:IN、OUT和INOUT。其中,输入参数可以传递给存储过程,当存储过程需要返回操作结果时使用输出参数,而输入/输出参数可以同时用作输入参数和输出参数。

过程体:存储过程体,包含调用过程时必须执行的SQL语句。本节以关键字BEGIN开始,以关键字END结束。如果存储过程主体中只有一条SQL语句,则可以省略BEGIN-END标志。

-- DELIMITER 命令将结束命令修改为其他字符
-- 这个地方修改为//(//就是结束符),注意DELIMITER 和 // 之间一定要有一个空格DELIMITER //CREATE PROCEDURE ShowStuScore()BEGINSELECT * FROM tb_students_score;
END //

2、查看存储过程

创建存储过程后,可以通过SHOW ATATUS语句查看存储过程的状态以及存储程序的定义

-- SHOW PROCEDURE STATUS LIKE语句查看存储过程的状态,LIKE不能省略
SHOW PROCEDURE STATUS LIKE 存储过程名;-- SHOW CREATE PROCEDURE语句查看存储过程的定义
SHOW CREATE PROCEDURE 存储过程名;

3、修改存储过程

-- MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程
ALTER PROCEDURE 存储过程名 [ 特征 ... ]-- ALTER PROCEDURE 语句用于修改存储过程的特征
-- 如果要修改存储过程的内容,可以先删除原存储过程,再以相同的命名创建新的存储过程
-- 如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。

4、删除存储过程

-- MySQL 中使用 DROP PROCEDURE 语句来删除数据库中已经存在的存储过程
DROP PROCEDURE <过程名>-- 通过查询***数据库下的**表来确认上面的删除是否成功。SQL 语句和运行结果如下:
mysql> SELECT * FROM ***.** WHERE routine_name='ShowStuScore';

三、存储函数实战

存储函数与存储过程一样,存储函数是在数据库中定义的SQL语句的集合。存储函数可以通过return语句返回函数值,该语句主要用于计算和返回值。存储过程不直接返回值,主要用于执行操作。

-- 使用 CREATE FUNCTION 语句来创建存储函数
CREATE FUNCTION sp_name ([func_parameter[...]])
RETURNS type
[characteristic ...] routine_bodyDELIMITER //CREATE FUNCTION func_student(id INT(11))RETURN(SELECT name FROM tb_student WHERE tb_student.id = id);
END //

总结

存储过程(Stored Procedure)和存储函数(Stored Function)是指存储在数据库中供所有用户调用的子程序。它们预先编译并存储在数据库系统中。本文讲解全面讲解其特性与优缺点,并附以实战解析。


http://www.ppmy.cn/news/8714.html

相关文章

第三十六讲:无线AP胖AP模式配置与管理

胖AP(Fat AP)配置一个开放式WLAN非常方便&#xff0c;需要完成的操作包括有线和无线两部分的配置。有线部分即ethernet接口的配置&#xff0c;保证AP能够接入Internet,无线部分的配置包括关联WLAN与VLAN&#xff0c;广播SSID,启用VAP&#xff0c;若无其他DHCP服务器的话&#x…

高并发系统设计 -- 服务限流算法

常见的限流算法 漏桶算法 漏桶法的关键点在于漏桶始终按照固定的速率运行&#xff0c;但是它并不能很好的处理有大量突发请求的场景&#xff0c;毕竟在某些场景下我们可能需要提高系统的处理效率&#xff0c;而不是一味的按照固定速率处理请求。 关于漏桶的实现&#xff0c;u…

计算机网络体系结构

目录常见的计算机网络体系结构计算机网络体系结构分层的必要性计算机网络体系结构分层思想举例计算机网络体系结构中的专用术语常见的计算机网络体系结构 TCP/IP体系结构相当于将OSI体系结构的物理层和数据链路层合并为网络接口层。并去掉了会话层和表示层。 由于TCP/IP在网络…

应用上K8S:Gradle打包

需求 对于spring boot项目我们一般使用Maven或Gradle进行编译打包&#xff0c;也可以借助docker plugin进行镜像打包并push到远程仓库。因此在经过《Docker随时随地玩转变量》一文&#xff0c;我们已经确定了Dockerfile&#xff0c;那么应用上K8S第二步&#xff1a;gradle打包…

D2. RGB Substring (hard version)(尺取)

Problem - 1196D2 - Codeforces 通用领域 医学 计算机 金融经济 你有一个包含n个字符的字符串s&#xff0c;每个字符是R&#xff0c; G或B。 你还得到一个整数k。你的任务是改变初始字符串s中的最小字符数&#xff0c;这样在改变之后&#xff0c;将会有一个长度为k的字符串…

gateway基本配置

目录 1、gateway简介 2、gateway核心概念 3、路由 4、断言 5、过滤器 5.1、过滤器介绍 5.2、内置局部过滤器与使用 5.3、内置全局过滤器 5.4、自定义全局过滤器 5.4.1、黑名单校验 5.4.2、模拟登录校验 6、一个简单的gateway配置实例 1、gateway简介 路由转发 执行…

【android Framework 探究】android 13 aosp 全记录 - 烧录

相关文章&#xff1a;【android Framework 探究】android 13 aosp编译全记录 写在开始 书接上文&#xff0c;编译完后&#xff0c;在二手平台挑挑拣拣最终下手piexl 5&#xff0c;这就开始迫不及待的烧录。 一&#xff0c;解锁bootloader 如果之前已经解锁可以跳过这步 adb r…

SpringBoot整合ShardingJdbc实现数据库水平分表实战

(1)添加Maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…