MySQL存储过程 、存储函数、以及优缺点

news2024/11/16 23:50:28

存储过程 VS 存储函数(函数)

| | 关键字 |调用语法 | 返回值 | 应用场景 |
|-存储过程-|-procedure-|-call 存储过程()-|-理解为0个或多个-|-一般用于更新-|
| 存储函数 | function | select 函数() | 只能是一个 | 一般用于查询结构为一个值并返回时|

存储函数可以放在select语句中,存储过程不行,反之,存储过程的功能更加强大,包括能够执行对表的操作(创建表、删除表等)和事务操作,这些功能是存储函数不具备的。

存储过程和存储函数的 查看、修改、删除

查看
  1. show create 语句查看存储过程和函数 创建信息
show create { procedure | function }  存储过程名或函数名

在这里插入图片描述
2. show status 语句查看存储过程和函数 状态信息

show { procedure | function } status [ like 'xxx' ]
 --[ like 'xxx' ] 匹配存储过程或函数的名称,可以省略。当省略不写时,会列出**MySQL数据库**中存在的所有存储过程和函数 状态信息

在这里插入图片描述
3.从information_schema.routines 表中查看存储过程和函数的信息

MySQL 中存储过程和函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息。

select  *   from   information_schema.Routines
where ROUTINE_NAME='存储过程 | 函数名'  [and ROUTINE_TYPE={'PROCEDURE | FUNCTION '}]\G

注意如果在mysql数据库中存在存储过程和函数名称相同的情况,最好指定 ROUTINE_TYPE查询条件是存储过程还是函数。
在这里插入图片描述

修改

修改存储过程、函数,不影响存储过程、函数功能,只能修改相关特性,使用alter语句实现
alter {procedure | function} 存储过程或函数名称
[characteristic]

在这里插入图片描述

在这里插入图片描述

删除

drop { procedure | function } [IF exists] 存储过程或函数的名

IF exists : 如果函数或存储过程,不存在,删除就报错, 加 IF exists 就可以防止发生错误,只是产生warning ,同时可以用 show warnings 查看警告信息。
在这里插入图片描述

关于存储过程使用的争议

优点
  1. 存储过程可以一次编译多次使用。 存储过程只在创建时进行编译,之后的使用都不需要重新编译,所以提高了 SQL 的执行效率
  2. 可以减少开发工作量。 将代码封装成模块,实际是是编程的核心思想之一,这样可以把复杂的问题拆解成不同的模块,然后模块之间可以重复使用,在减少开发工作量的同时,还能保证代码的结构清晰
  3. 存储过程的安全性强。我们设定存储过程可以在设置对用户的使用权限,这样就和视图一样具有较强的安全性
  4. 可以减少网络传输量。 因为代码封装到存储过程中,每次使用只需要调用存储过程即可,这样就减少网络传输量。
  5. 良好的封装性。在进行相对复杂的数据库操作时,原本需要使用一条一条的SQL语句。可能需要连接多次数据库才能完成的操作。现在变成一次存储过程,只需要连接一次即可
缺点
  1. 可移植性差。 存储过程不能跨数据库移植,比如 在 MySQL、Oracle、SQL Server里编写的存储过程,在换成其他数据库时需要重新编写
  2. 调试困难。 只有少数DBMS支持存储过程的调试,对于复杂的存储过程来说,开发和维护都不容易。虽然也有些第三方工具可以对存储过程进行调试,但要收费
  3. 存储过程的版本管理困难。 比如数据表索引发生变化了,可能会导致存储过程失效。我们在开发软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦
  4. 它不适合高并发的场景。 高并发的场景需要减少数据库的压力,有时数据库会采用分表分库的方式,而且对可扩展性要求很高,在这种情况下,存储过程会变得难以维护,增加数据库的压力。

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

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

相关文章

C++——两个关于继承,多态的奇妙问题

文章目录 问题一(有关菱形虚拟继承)问题二(有关多态)总结 问题一(有关菱形虚拟继承) 前言:该问题涉及菱形虚拟继承的问题,如果不知道菱形虚拟继承是什么的,可以看看博主的另一篇博客,链接如下: …

​下一代Transformer:RetNet结构可视化及Vision RetNet展望

©PaperWeekly 原创 作者 | 岳廷 微软和清华大学的研究人员在论文《Retentive Network: A Successor to Transformer for Large Language Models》中提出了一种新的模型架构 RetNet,同时实现 Transformer 模型的高效并行训练、低延迟高吞吐量的推理以及良好的建…

数据结构--拓扑排序

数据结构–拓扑排序 AOV⽹ A O V ⽹ \color{red}AOV⽹ AOV⽹(Activity On Vertex NetWork&#xff0c;⽤顶点表示活动的⽹)&#xff1a; ⽤ D A G 图 \color{red}DAG图 DAG图&#xff08;有向⽆环图&#xff09;表示⼀个⼯程。顶点表示活动&#xff0c;有向边 < V i , V j …

(二)Git在公司中团队内合作和跨团队合作和分支操作的全部流程(一篇就够)

&#xff08;一&#xff09;Git连接GitHub的全部流程https://blog.csdn.net/m0_65992672/article/details/132333727 团队内协作 项目经理通过git push将代码推送到远程仓库【也就是git、gitee等代码托管中心】,推完以后组员可以通过git clone克隆下来代码&#xff0c;如果组…

版本控制工具Git集成IDEA的使用(第一篇Gitee)

目录 一、Gitee的使用 1、注册网站会员 2、用户中心 3、创建远程仓库 4、配置SSH免密登录 二、集成IDEA&#xff0c;Git项目搭建 1、本地仓库搭建 1&#xff09;创建一个新项目 2&#xff09;打开终端&#xff0c;在当前目录新建一个Git代码库 3&#xff09;忽略文件 …

APP内嵌小游戏,全面提升用户活跃、留存

开发者想要提高APP的用户活跃度可以通过拉新的方式完成&#xff0c;但目前拉新的成本较高&#xff0c;而且新的目标用户一般很难留住&#xff0c;流失率也比较高。 此时&#xff0c;可以通过植入小游戏的方式来提高用户活跃度&#xff0c;游戏的优势在于可以快速吸引用户&…

无涯教程-Perl - system函数

描述 该函数执行PROGRAM指定的命令,并将LIST作为参数传递给该命令。 返回值是等待功能返回的程序的退出状态。要获得实际的退出值,请除以256。 语法 以下是此函数的简单语法- system PROGRAM, LISTsystem PROGRAM返回值 此函数返回wai返回的程序的退出状态 例 以下是显…

Everest Group发布“2023任务挖掘”报告:多家RPA厂商上榜

近日&#xff0c;全球知名信息咨询机构Everest Group发布了“2023任务挖掘”供应商报告。通过市场影响力&#xff08;市场应用、企业覆盖、价值交付&#xff09;、产品交付能力&#xff08;产品策略、数据收集和整合、任务智能化、产品培训支持、商业模式&#xff09;多个维度&…

视觉slam十四讲---第一弹三维空间刚体运动

1.旋转矩阵 1.1内积 1.2外积 1.3坐标系间的欧式变换 相机运动是一个刚体运动&#xff0c;它保证了同一个向量在各个坐标系下的长度和夹角都不会 发生变化。这种变换称为欧氏变换。 旋转矩阵&#xff1a;它是一个行列式为 1 的正交矩阵。 旋转矩阵为正交阵&#xff0c;它的逆…

召集令:CloudQuery 社区有奖征文活动来啦!

CloudQuery 社区第一期征文活动来袭&#xff01;&#xff01;&#xff01;只要你对 CloudQuery 产品感兴趣&#xff0c;或者是希望了解 CQ &#xff0c;都可以来参加&#xff0c;在本期活动中&#xff0c;我们也为大家准备了多种主题供你选择&#xff0c;CQ 使用案例、版本对比…

集合(map+set)

【数据结构1-3】集合 - 题单 - 洛谷 例题 P1551 亲戚 亲戚 - 洛谷 并查集 #include<bits/stdc.h> using namespace std; int n,m,q,f[10010],x,y,a,b; int find(int x)//找出x家的大佬 也就是二叉树的祖先节点 {if(f[x]x)//x是x的爸爸&#xff0c;简单的来说就是x没爸…

交流充电桩控制主板的模块结构

交流充电桩控制主板的模块结构 你是否好奇过&#xff0c;交流充电桩是如何给电动汽车充电的?充电桩的控制主板又是由哪些部分组成的呢?今天我们就来一探究竟! 首先&#xff0c;让我们来看看主控制器。主控制器可谓是交流充电桩主板的大脑&#xff0c;它负责控制充电桩的工作流…

【boost网络库从青铜到王者】第四篇:asio网络编程中的socket同步读(接收)写(发送)

文章目录 1、asio中的同步发送write_some()2、asio中的socket中的同步发送send() 可以在一次性同步发送所以数据出去3、asio中的write()发送数据4、asio中的同步接收read_some()5、asio中的socket中的同步接收receive()可以一次性同步接收对方发送的数据6、asio中的read()接收数…

OpenAI全球招外包大军,手把手训练ChatGPT取代码农 ; 码农:我自己「杀」自己

目录 前言 OpenAI招了一千多名外包人员&#xff0c;训练AI学会像人类一样一步步思考。如果ChatGPT「学成归来」&#xff0c;码农恐怕真的危了&#xff1f; 码农真的危了&#xff01; 当时OpenAI也说&#xff0c;ChatGPT最合适的定位&#xff0c;应该是编码辅助工具。 用Cha…

matlab使用教程(17)—多项式的定义和运算

1.创建并计算多项式 此示例说明如何在 MATLAB 中将多项式表示为向量以及根据相关点计算多项式。 1.1 表示多项式 MATLAB 将多项式表示为行向量&#xff0c;其中包含按降幂排序的系数。例如&#xff0c;三元素向量 p [p2 p1 p0]; 表示多项式 创建一个向量以表示二次多项式…

mysql 存储过大如何处理

文章目录 定位是否MySQL存储过大处理binlog大小查看目前存储策略设置binlog 保存时间 定位是否MySQL存储过大 查询当前文件夹大小 du -sh查询第一层文件夹大小 du -h -d 1处理binlog大小 查看目前存储策略 查询日志保存天数 show variables like expire_logs_days;0&…

大势智慧软硬件技术答疑第八期

1.DasViewer可以使用同一个账号登录多台电脑&#xff0c;然后同时进行格式转换操作吗&#xff1f; 答&#xff1a;可以的 2.在DasViewer里面添加了标注点&#xff0c;能手动修改标注点坐标、手动输入坐标值 吗&#xff1f; 答&#xff1a;目前DasViewer暂不支持手动输入坐标 …

Android12 偶现触摸失灵

生产线 在烧录固件时&#xff0c;会偶然出现稍完之后屏幕触摸用不了。前期以为是烧录没弄好&#xff0c;后面又发生&#xff0c;就怀疑与产品有关了。 首先进行抓日志分析&#xff1a;有问题的设备先确认下dmesg信息 adb连接设备进行日志抓取&#xff1a; logcat > /sdcard…

【Go】锁相关

mutex锁相关 mutex源码分析 Locker接口&#xff1a; type Locker interface {Lock()Unlock() }Mutex 就实现了这个接口&#xff0c;Lock请求锁&#xff0c;Unlock释放锁 type Mutex struct {state int32 //锁状态&#xff0c;保护四部分含义sema uint32 //信号量&#…