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

MySQL(存储过程,store procedure)——存储过程的前世今生 MySQL存储过程体验 MybatisPlus中使用存储过程

在这里插入图片描述

前言

SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言,可以用于多种关系型数据库管理系统(RDBMS),如MySQL、Oracle、SQL Server等。

MySQL是一种开源的关系型数据库管理系统,它使用SQL作为其查询语言。MySQL是最流行的开源数据库之一,它具有高性能、可靠性和可扩展性。MySQL支持多用户、多线程和多表操作,可以在各种操作系统上运行。

因此,SQL是一种语言,而MySQL是一种关系型数据库管理系统,它使用SQL作为其查询语言。SQL可以用于其他关系型数据库管理系统,而MySQL是其中的一种。

在这里插入图片描述

MySQL最为最流行的开源数据库,其重要性不言而喻,也是大多数程序员接触的第一款数据库,深入认识和理解MySQL也比较重要。

本篇博客介绍存储过程 (store procedure),分析其应用领域,在Navicat中使用MySQL的存储过程,并结合Mybatis-Plus使用存储过程。

其他相关的MySQL博客文章列表如下

SQL学习(1)——数据库概念+单表SQL查询+多表SQL查询

SQL进阶(2)——SQL语句类型 & 增删改查CRUD & 事务初步 & 表关联关系 & 视图 +索引


MySQL持久化数据——主从分离 & Linux下创建2个MySQL的Docker容器 & 挂载方式启动 & 配置主从

redis漏洞回顾 & MySQL数据安全解决 搭建主从集群MySQL & 相关设置

在这里插入图片描述

目录

  • 前言
  • 引出
  • 数据库存储过程
    • 什么是存储过程?
    • 应用领域
  • MySQL中使用存储过程
    • 1.新建函数
    • 2.选择模式
    • 4.编写存储过程
    • 5.查询中调用存储过程
  • MybatisPlus使用存储过程
    • 1.新建存储过程
    • 2.注解调用存储过程
    • 3.运行时间对比
  • 总结

引出


1.介绍存储过程 (store procedure);
2.分析其应用领域;
3.Navicat中使用MySQL的存储过程;
结合Mybatis-Plus使用存储过程;

数据库存储过程

什么是存储过程?

数据库存储过程是一组预定义的SQL语句集合,它们被存储在数据库中并可以被多次调用。存储过程通常用于执行一系列的数据库操作,如查询、插入、更新和删除等。存储过程可以接受参数,并且可以包含条件判断、循环和异常处理等逻辑。存储过程可以在数据库服务器上执行,减少了网络传输的开销,提高了数据库的性能和安全性。

存储过程的优点包括:

  1. 提高性能:存储过程在数据库服务器上执行,减少了网络传输的开销,提高了执行效率。
  2. 代码复用:存储过程可以被多次调用,提高了代码的复用性。
  3. 安全性:存储过程可以对数据进行权限控制,只允许授权用户执行特定的操作。
  4. 简化开发:存储过程可以封装复杂的业务逻辑,简化了应用程序的开发过程。

应用领域

在金融领域用的多,互联网领域用的少,阿里甚至禁止使用存储过程,阿里禁止使用存储过程的原因主要有以下几点:

  1. 可移植性:存储过程的语法和特性在不同的数据库管理系统中可能存在差异,使用存储过程会导致应用程序与特定数据库管理系统绑定,降低了应用程序的可移植性。
  2. 可维护性:存储过程通常是在数据库服务器上定义和维护的,而不是在应用程序中。这样会增加应用程序的维护难度,特别是在多个环境中部署和升级时。
  3. 性能问题:存储过程的执行是在数据库服务器上进行的,而不是在应用程序中。这样会增加数据库服务器的负载,并且可能导致性能瓶颈。
  4. 安全性问题:存储过程的执行权限通常是在数据库层面进行控制的,这可能导致安全性问题。如果存储过程的权限设置不当,可能会导致数据泄露或数据被篡改的风险。
  5. 可扩展性问题:存储过程通常是在数据库服务器上执行的,这限制了应用程序的扩展性。如果需要将应用程序部署到多个服务器或云环境中,使用存储过程可能会导致扩展和部署的困难。

基于以上原因,阿里等一些公司更倾向于将业务逻辑放在应用程序中,而不是使用存储过程。这样可以提高应用程序的可移植性、可维护性和性能,并更好地控制安全性和扩展性。然而,是否使用存储过程还是应该根据具体的业务需求和数据库管理系统的特性来决定。

从业务角度来看,存储过程更容易保持业务的规范性、一致性,而互联网不用存储过程主要是因为业务的随意性、一次性。

上个世纪90年代后期。IBM的并行计算机+DB2数据库/Oracle数据库软件是当时选择不多的解决方案。当时的存储和网络的性能都很差,对于银行来说,实在是没有必要和可能把数据从数据库读出来,交由应用服务器处理,系统[吞吐量](TPS指标)太低。相反地,还会导致一系列的分布式处理的问题。

相比银行的财大气粗,当年互联网可是草根,没钱又没人(后来也是一样,大多数公司没钱没人)。当年互联网建站的标配是Apache+PHP+MySQL。MySQL对于[数据库应用 的发展,贡献甚大。虽然MySQL在2003年提供了存储过程,但是在90年代[计算机专业 的教学中,数据库算是小众

https://www.zhihu.com/question/597801920/answer/3003905227?utm_id=0

MySQL中使用存储过程

1.新建函数

在这里插入图片描述

2.选择模式

在这里插入图片描述

指定名字和类型,注意varchar需要指定长度

在这里插入图片描述

不然会报错
在这里插入图片描述

加入长度后成功

在这里插入图片描述

4.编写存储过程

在这里插入图片描述

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_param`(IN `name` VARCHAR ( 20 ),OUT auth VARCHAR ( 20 ))
BEGIN-- 	SELECT * FROM book_tab WHERE book_title LIKE name;SELECTSUBSTRING_INDEX( book_author, ',', 1 ) INTO auth FROMbook_tab WHEREbook_title LIKE NAME;END

作用,取到第一作者

在这里插入图片描述

5.查询中调用存储过程

在这里插入图片描述

CALL proc_param('%中国人的性格%',@auth);
SELECT @auth

MybatisPlus使用存储过程

1.新建存储过程

在这里插入图片描述

CREATE DEFINER=`root`@`localhost` PROCEDURE `findBookProc`()
BEGINSELECT* FROMbook_tab;END

2.注解调用存储过程

在这里插入图片描述

package com.tianju.bm.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tianju.bm.domain.entity.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.StatementType;import java.util.List;
import java.util.Map;@Mapper
public interface BookMapper extends BaseMapper<Book> {/*** 存储过程全查询* @param map* @return*/@Select({"call book_db.findBookProc()"})@Options(statementType = StatementType.CALLABLE)List<Book> findAllProc(Map<String,Book> map);
}

3.运行时间对比

在这里插入图片描述


总结

1.介绍存储过程 (store procedure);
2.分析其应用领域;
3.Navicat中使用MySQL的存储过程;
结合Mybatis-Plus使用存储过程;

相关文章:

MySQL(存储过程,store procedure)——存储过程的前世今生 MySQL存储过程体验 MybatisPlus中使用存储过程

前言 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的标准化语言&#xff0c;它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言&#xff0c;可以用于多种关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;如MySQ…...

如何建立线上线下相结合的数字化新零售体系?

身处今数字化时代&#xff0c;建立线上线下相结合的数字化新零售体系是企业成功的关键。蚓链数字化营销系统致力于帮助企业实现数字化转型&#xff0c;打通线上线下销售渠道&#xff0c;提升品牌影响力和用户黏性&#xff0c;那么具体是如何建立的&#xff1f; 1. 搭建数字化中…...

python:xlwings 操作 Excel 加入图片

pip install xlwings ; xlwings-0.28.5-cp37-cp37m-win_amd64.whl (1.6 MB) 摘要&#xff1a;Make Excel fly: Interact with Excel from Python and vice versa. Requires: pywin32 编写 xlwings_test.py 如下 # -*- coding: utf-8 -*- """ xlwings 结合 …...

关于hive的时间戳

unix_timestamp&#xff08;&#xff09;和 from_unixtime&#xff08;&#xff09;的2个都是格林威治时间 北京时间 格林威治时间8 from_unixtme 是可以进行自动时区转换的 (4.0新特性) 4.0之前可以通过from_utc_timestamp进行查询 如果时间戳为小数&#xff0c;是秒&#…...

win10 wsl安装步骤

参考&#xff1a; 安装 WSL | Microsoft Learn 一、安装wsl 1.若要查看可通过在线商店下载的可用 Linux 发行版列表&#xff0c;请输入&#xff1a; wsl --list --online 或 wsl -l -o> wsl -l -o 以下是可安装的有效分发的列表。 使用 wsl.exe --install <Distro>…...

深入理解Spring Boot AOP:切面编程的优势与应用

在开发现代化的软件系统中&#xff0c;我们经常会遇到一些横切关注点&#xff08;cross-cutting concerns&#xff09;&#xff0c;比如日志记录、安全控制、事务管理等。传统的面向对象编程&#xff08;OOP&#xff09;在处理这些关注点时往往需要在多个模块中重复编写相似的代…...

使用大模型提效程序员工作

引言 随着人工智能技术的不断发展&#xff0c;大模型在软件开发中的应用越来越广泛。 这些大模型&#xff0c;如GPT、文心一言、讯飞星火、盘古大模型等&#xff0c;可以帮助程序员提高工作效率&#xff0c;加快开发速度&#xff0c;并提供更好的用户体验。 本文将介绍我在实…...

如何应对量化交易,个人股票账户如何实现量化程序化自动交易

目前股票量化交易是对个人账户开放的&#xff0c;如果你没开通&#xff0c;可能是没有找对渠道&#xff0c;很多券商的手机客户端是包含某些简易版的策略交易&#xff0c;如网格策略&#xff0c;自动止盈止损等&#xff0c;这些策略交易虽然简单、灵活性差&#xff0c;但也是量…...

milvus测试

milvus测试 目标 其实&#xff0c;我应该弄明白他的输入输出分别是什么&#xff1f; 输入是图片&#xff0c;图片经过ml模型进行特征提取&#xff0c;再在milvus中进行存储或者检索 部署 ✘ delldell-Precision-3630-Tower  /nvme/baum/git-project/milvus   master …...

antd 表格getCheckboxProps禁用

需求&#xff1a;列表某些数据复选框禁用 实现效果图&#xff1a; 实现代码&#xff1a; <a-table :pagination"false" :row-selection"{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange,getCheckboxProps:getCheckboxProps }" :column…...

京东商品列表数据接口,关键词搜索京东商品数据接口

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取京东网站上的商品页面。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#xff0c;京东网站…...

Vue使用BMapGL,及marker简单使用

1、封装加载器 export function BMapLoader(ak) {return new Promise((resolve, reject) > {if (window.BMapGL) {resolve(window.BMapGL)} else {const script document.createElement(script)script.type text/javascriptscript.src https://api.map.baidu.com/api?v…...

WuThreat身份安全云-TVD每日漏洞情报-2023-10-10

漏洞名称:Glibc ld.so本地权限提升漏洞 漏洞级别:高危 漏洞编号:CVE-2023-4911,CNNVD-202310-197 相关涉及:系统-ubuntu_22.04-glibc-*-Up to-(excluding)-2.35-0ubuntu3.4- 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-24714 漏洞名称:D-L…...

BSCI认证是谁来验厂?

BSCI认证是BusinessSocialComplianceInitiative的缩写&#xff0c;中文被叫做商业社会标准认证。而BSCI则是倡议商界遵守社会责任的组织&#xff0c;同时它是一个非营利性的组织&#xff0c;宗旨是通过一套统一程序&#xff0c;同时不断完善发展政策&#xff0c;实现监控和促进…...

Java中如何在两个线程间共享数据

Java中如何在两个线程间共享数据 在Java中&#xff0c;在两个线程之间共享数据是常见的需求&#xff0c;但需要小心处理以确保线程安全性。有多种方式可以在两个线程之间共享数据&#xff0c;下面将详细介绍这些方式&#xff0c;以及它们的优缺点。 方式1&#xff1a;共享可变…...

4、在 CentOS 8 系统上安装 pgAdmin 4

pgAdmin 4 是一个开源的数据库管理工具&#xff0c;专门用于管理和操作 PostgreSQL 数据库系统。它提供了一个图形用户界面&#xff08;GUI&#xff09;&#xff0c;使用户能够轻松地连接到 PostgreSQL 数据库实例&#xff0c;执行 SQL 查询&#xff0c;管理数据库对象&#xf…...

【数字人】3、LIA | 使用隐式空间来实现视频驱动单张图数字人生成(ICLR 2022)

文章目录 一、背景二、方法2.1 latent motion representation2.2 latent code driven image animation2.3 学习方式2.4 推理 三、效果3.1 数据集3.2 训练细节3.3 评估3.4 定性效果3.5 定量效果3.6 消融实验3.7 失败示例 论文&#xff1a;Latent Image Animator: Learning to An…...

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法 1、最近邻插值法 1、最近邻插值法 *最邻近插值&#xff1a;将每个目标像素找到距离它最近的原图像素点&#xff0c;然后将该像素的值直接赋值给目标像素 优点&#xff1a;实现简单&#xff0c;计算速度快缺点&…...

计算机竞赛 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…...

【2023美团后端-8】删除字符串的方案,限制不能连续删

小美定义一个字符申是“美丽串”&#xff0c;当且仅当该字符串包含”mei”连续子串。例如”meimei”、“xiaomeichan"都是美丽串&#xff0c;现在小美拿到了一个字符串&#xff0c;她准备删除一些字符&#xff0c;但不能删除两个连续字符。小美希望最终字符串变成美丽串&a…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...