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

存储过程 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.mzph.cn/news/40768.shtml

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

相关文章

讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?

同时向讯飞星火、文心一言和通义千问三个国产AI模型提个相同的问题: “python 写一个贪吃蛇的游戏代码” 看哪一家AI写的程序直接能用,谁就胜出! 讯飞星火 讯飞星火给出的代码: import pygame import sys import random# 初…

步入React正殿 - React组件设计模式

目录 扩展学习资料 高阶组件 /src/components/hoc/withTooltip.js /src/components/hoc/itemA.jsx /src/components/hoc/itemB.jsx /src/App.js 函数作为子组件【Render pprops】 函数作为子组件 /src/components/rp/itemC.jsx【父组件】 /src/components/rp/withToo…

214、仿真-基于51单片机温度甲醛一氧化碳(co)电机净化报警Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…

Qt+Pyhton实现麒麟V10系统下word文档读写功能

目录 前言1.C调用python1.1 安装Python开发环境1.2 修改Qt工程配置1.3 初始化Python环境1.4 C 调用Python 函数1.5 常用的Python接口 2.python虚拟环境2.1Python虚拟环境简介2.2 virtualenv 安装及使用2.3 在C程序中配置virtualenv 虚拟环境 3.python-docx库的应用4.总结 前言 …

网络安全 Day29-运维安全项目-iptables防火墙

iptables防火墙 1. 防火墙概述2. 防火墙2.1 防火墙种类及使用说明2.2 必须熟悉的名词2.3 iptables 执行过程※※※※※2.4 表与链※※※※※2.4.1 简介2.4.2 每个表说明2.4.2.1 filter表 :star::star::star::star::star:2.4.2.2 nat表 2.5 环境准备及命令2.6 案例01&#xff1a…

ChatGLM2-6B安装部署(详尽版)

1、环境部署 安装Anaconda3 安装GIT 安装GUDA 11.8 安装NVIDIA 图形化驱动 522.25版本,如果电脑本身是更高版本则不用更新 1.1、检查CUDA 运行cmd或者Anaconda,运行以下命令 nvidia-smi CUDA Version是版本信息,Dricer Version是图形化…

LeetCode 160.相交链表

文章目录 💡题目分析💡解题思路🚩步骤一:找尾节点🚩步骤二:判断尾节点是否相等🚩步骤三:找交点🍄思路1🍄思路2 🔔接口源码 题目链接👉…

C++之map的emplace与pair插入键值对用例(一百七十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

213、仿真-基于51单片机智能电表电能表用电量电费报警Proteus仿真设计(程序+Proteus仿真+原理图+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…

java-JVM内存区域JVM运行时内存

一. JVM 内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 HotspotVM 内, 每个线程都与操作系统的本地线程直接映…

SwiftUI 动画进阶:实现行星绕圆周轨道运动

0. 概览 SwiftUI 动画对于优秀 App 可以说是布帛菽粟。利用美妙的动画我们不仅可以活跃界面元素,更可以单独打造出一整套生动有机的世界,激活无限可能。 如上图所示,我们用动画粗略实现了一个小太阳系:8大行星围绕太阳旋转,而卫星们围绕各个行星旋转。 在本篇博文中,您将…

【第二讲---初识SLAM】

SLAM简介 视觉SLAM,主要指的是利用相机完成建图和定位问题。如果传感器是激光,那么就称为激光SLAM。 定位(明白自身状态(即位置))建图(了解外在环境)。 视觉SLAM中使用的相机与常见…

Flink之Task解析

Flink之Task解析 对Flink的Task进行解析前,我们首先要清楚几个角色TaskManager、Slot、Task、Subtask、TaskChain分别是什么 角色注释TaskManager在Flink中TaskManager就是一个管理task的进程,每个节点只有一个TaskManagerSlotSlot就是TaskManager中的槽位,一个TaskManager中可…

数据结构单链表

单链表 1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 在我们开始讲链表之前,我们是写了顺序表,顺序表就是类似一个数组的东西&#xff0…

上海虚拟展厅制作平台怎么选,蛙色3DVR 助力行业发展

引言: 在数字化时代,虚拟展厅成为了企业宣传的重要手段。而作为一家位于上海的实力平台,上海蛙色3DVR凭借其卓越的功能和创新的技术,成为了企业展示和宣传的首选。 一、虚拟展厅的优势 虚拟展厅的崛起是指随着科技的进步&#x…

手机商城网站的分析与设计(论文+源码)_kaic

目录 摘 要 1 1 绪论 2 1.1选题背景意义 2 1.2国内外研究现状 2 1.2.1国内研究现状 2 1.2.2国外研究现状 3 1.3研究内容 3 2 网上手机商城网站相关技术 4 2.1.NET框架 4 2.2Access数据库 4 2.3 JavaScript技术 4 3网上手机商城网站分析与设…

Grafana+Prometheus技术文档-进阶使用-监控spring-boot项目

阿丹: 之前已经实现了使用Prometheus来对服务器进行了监控和仪表盘的创建,现在就需要对这些监控方法使用在spring-boot中去。 实现思路: 1、集成Actuator 2、加入Prometheus的依赖 3、配置开放端口、以及开放监控 4、配置Prometheus中的配置…

一次网络不通“争吵“引发的思考

作者: 郑明泉、余凯 为啥争吵,吵什么? “你到底在说什么啊,我K8s的ecs节点要访问clb的地址不通和本地网卡有什么关系…” 气愤语气都从电话那头传了过来,这时电话两端都沉默了。过了好一会传来地铁小姐姐甜美的播报声…

【一】ubuntu20.04上搭建containerd版( 1.2.4 以上)k8s及kuboard V3

k8s 部署全程在超级用户下进行 sudo su本文请根据大纲顺序阅读! 一、配置基础环境(在全部节点执行) 1、安装docker 使用apt安装containerd 新版k8s已经弃用docker转为containerd,如果要将docker改为containerd详见&#xff1a…

对dubbo的DubboReference.check的参数进行剖析

背景 在使用dubbo的时候,发现当消费者启动的时候,如果提供者没有启动,即使提供者后来启动了,消费者也调不通提供者提供的接口了。 注册中心使用都是nacos dubbo版本是3.0.4 例子 接口 public interface DemoService {String…