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

MySQL存储过程怎么写?看完这篇秒懂

今天测试一个数据展示模块,依赖于数据部推送数据,但是他们没有人员配合,为了赶工,于是自己徒手造数据,有些页面,要查看翻页和权限等相关的功能,手动造是不可能的,因为我懒....哈哈哈哈,于是写了个存储过程,分分钟搞定,又多了些许的摸鱼时间~

一、MySQL存储过程简介

MySQL存储过程是一组预定义的SQL语句,被存储在数据库中,以便可以重复调用和执行。存储过程通常用于将一系列SQL操作封装到单个逻辑单元中,以提高代码的重用性、性能和安全性。

二、存储过程的利弊

一)存储过程的优点

  1. 性能优化: 存储过程可以预编译并存储在数据库中,提高了查询的执行效率,减少了重复的解析和编译操作。
  2. 代码重用和模块化: 存储过程可以将一系列SQL语句封装成可重用的代码块,提高了开发效率并减少了代码的冗余。
  3. 安全性和权限控制: 存储过程可以限制对底层表的直接访问,只允许通过存储过程进行特定操作,从而提高了数据的安全性。
  4. 简化复杂业务逻辑: 存储过程可以在数据库层面上实现复杂的业务规则,使应用层面的代码更简洁和可维护。
  5. 事务管理: 存储过程可以用于管理事务,确保一系列数据库操作的一致性和完整性。
  6. 减少网络通信: 存储过程的执行在数据库服务器上进行,减少了与数据库之间的网络通信次数,提高了性能。
  7. 版本控制和管理: 存储过程的更改可以被跟踪和管理,有助于维护和更新数据库逻辑。

二)存储过程的缺点

  1. 复杂性: 编写和维护存储过程可能比较复杂,特别是对于复杂的业务逻辑,可能需要更深入的数据库知识。
  2. 可移植性: 存储过程的语法和实现在不同的数据库管理系统之间可能有差异,可能会影响到应用程序的可移植性。
  3. 难以调试: 存储过程的调试可能比较困难,特别是在一些数据库系统中没有提供强大的调试工具的情况下。
  4. 陷阱和性能问题: 不当的使用存储过程可能导致性能问题,如死锁、性能下降等。
  5. 可维护性: 随着业务逻辑的变化,存储过程可能变得复杂和难以维护,需要适当的文档和规范。
  6. 数据库版本升级: 在数据库版本升级时,存储过程的兼容性可能会成为问题,需要仔细测试和调整。

三、适用场景

存储过程在许多情况下都可以发挥重要作用,特别是在处理复杂业务逻辑和优化数据库性能方面。以下是一些适用场景,可以考虑使用存储过程:

  1. 复杂业务逻辑: 当业务逻辑变得复杂时,使用存储过程可以将逻辑集中在数据库中,简化应用程序代码,并提高代码的可维护性。
  2. 数据验证和处理: 存储过程可以用于执行数据验证、转换和处理,确保数据的一致性和完整性。
  3. 数据转换和清洗: 在数据仓库或ETL(Extract, Transform, Load)过程中,存储过程可以用于进行数据转换、清洗和整理。
  4. 权限控制: 存储过程可以用于限制对底层表的直接访问,从而实现更精细的权限控制。
  5. 自动化任务: 存储过程可以在特定时间点或特定条件下自动触发,执行一系列操作,如数据备份、报表生成等。

我们在测试过程中,有很多场景用到了存储过程,例如:

  1. 订单处理: 在电子商务应用中,存储过程可以用于创建、更新和取消订单,以及执行库存检查和价格计算等操作。
  2. 报表生成: 存储过程可以用于生成复杂的报表,汇总数据并按照指定格式呈现

四、MySQL基本语句格式

  • DELIMITER $$:这是一个特殊的分隔符设置,用于告诉 MySQL 在定义存储过程时使用不同于默认分隔符(通常为分号)的分隔符。这是因为存储过程体内部可能包含多个分号,使用不同的分隔符可以避免冲突。
  • CREATE PROCEDURE 数据库名.存储过程名([in变量名 类型,OUT 参数 2,...]):这是创建存储过程的语句。数据库名.存储过程名是存储过程起的名称,存储过程的参数,可以包含输入参数(IN)、输出参数(OUT)和输入/输出参数(INOUT)。
  • 输入参数(IN): 代表输入参数(默认情况下为in参数),表示该参数的值必须由调用程序指定,值不会改变。
  • 输出参数(OUT):代表输出参数,表示该参数的值经存储过程计算后,将out参数的计算结果返回给调用程序。
  • 输入/输出参数(INOUT): 是一种结合了输入和输出功能的参数。它们既可以传递数据给存储过程,也可以从存储过程中传递数据给外部。
  • BEGIN:这标志着存储过程体的开始。存储过程体是包含实际的 SQL 语句和控制流程语句的代码块。
  • END:这标志着存储过程体的结束。
  • DELIMITER ;:这是恢复默认分隔符为分号的语句。

在 BEGIN 和 END 之间,可以编写一系列的 SQL 语句、控制流程语句(如 IF、CASE、LOOP 等),以及声明变量和处理异常等,这些语句构成了存储过程的具体逻辑。

五、项目实战

好了,前面的基础知识科普完了,下面我们进入正题,跟大家分享下我写的存储过程,我用的数据库客户端连接工具是SQLyog~

一)项目需求

简单点,就是造数据,有一个表bar-day,主要用来显示每个代理商下每天每个gid的keep_pc信息,一个代理商下有多个gid,现在要造的数据就是在三种不同代理商下,造多天多个gid的信息,用来验证每个代理商下每天展示的gid数据展示是不是正确的。

数据库表结构:

我要是手动插入的话,造一个月的数据,得造到地老天荒,于是故事就来了~

二)创建存储过程步骤

以客户端连接工具SQLyog为例:

1、创建存储过程

在数据库下找到存储过程,鼠标右键,创建存储过程

2、命名存储过程

3、创建成功

创建成功后,就可以填写对应的SQL语句了,在BEGIN和END之间补充.

4、编写SQL存储过程

现在需要造每天的数据,思路如下:

1)传参

所以定义了两个入参,一个开始日期,一个结束日期,例如:2023-08-01

2)定义并初始化变量

开始时间和keep_pc作为变量,并初始化

3)while循环

每循环一次,开始时间和keep_pc的值+1,直到开始时间=结束时间,循环结束。

4)编写SQL存储过程

编写好的SQL存储过程如下:

语句如下:

DELIMITER $$CREATEPROCEDURE `cbap`.`test-bar-day`(IN start_date DATE,IN end_date DATE)BEGINDECLARE current_date1 DATE; -- 当前日期DECLARE keep_pc INT;SET current_date1 = start_date;-- 初始化变量的值SET keep_pc = 60;WHILE current_date1<= end_date DO-- while循环INSERT INTO `cbap`.`cbap_bar_day` (`dtime`, `gid`, `bar_name`, `agent_id`, `agent_name`, `keep_pc`)VALUES (current_date1, '1010001', '测试吧01', '562501', '小张', keep_pc);SET current_date1 = ADDDATE(current_date1, 1);-- 日期+1天SET keep_pc = keep_pc +1 ; -- 数据+1END WHILE;END$$DELIMITER ;

5)执行存储过程

SQLyog的用法是,在SQL页面,鼠标右键,执所有查询

执行完成后,在左边的存储过程下才会有该文件,否则没有。

5、调用存储过程

SQLyog的用法是,找到存储过程中用到的表cbap_bar_day,右键查询,在查询窗口,调用语法是:call 存储过程名称(传参),直接执行所有查询即可,例如:

CALL `bar-day`('2023-07-01', '2023-07-02');

说明:其他的MySQL客户端连接工具,可能操作步骤不同,思路大同小异。

这样,一个存储过程就完成了,比起手动一条一条的增加,这效率少说增加10倍不过分吧,赶紧安排起来,给自己多一些摸鱼时间~

相关文章:

MySQL存储过程怎么写?看完这篇秒懂

今天测试一个数据展示模块&#xff0c;依赖于数据部推送数据&#xff0c;但是他们没有人员配合&#xff0c;为了赶工&#xff0c;于是自己徒手造数据&#xff0c;有些页面&#xff0c;要查看翻页和权限等相关的功能&#xff0c;手动造是不可能的&#xff0c;因为我懒....哈哈哈…...

STM32电源名词解释

STM32电源架构 常用名词 VCC Ccircuit 表示电路&#xff0c;即接入电路的电压。 VDD Ddevice 表示器件&#xff0c; 即器件内部的工作电压。 VSS Sseries 表示公共连接&#xff0c;通常指电路公共接地端电压。 VDDA Aanalog 表示模拟&#xff0c;是模拟电路部分的电源。主要为…...

《操作系统真象还原》学习笔记:第七章 中断

由于 CPU 获知了计算机中发生的某些事&#xff0c;CPU 暂停正在执行的程序&#xff0c;转而去执行处理该事件的程序&#xff0c;当这段程序执行完毕后&#xff0c;CPU 继续执行刚才的程序。整个过程称为中断处理&#xff0c;也称为中断。 把中断按事件来源分类&#xff0c;来自…...

【学习笔记之vue】These dependencies were not found:

These dependencies were not found:方案一 全部安装一遍 我们先浅试一个axios >> npm install axios 安装完报错就没有axios了&#xff0c;验证咱们的想法没有问题&#xff0c;实行&#xff01; ok...

【数据结构】实现栈和队列

目录 一、栈1.栈的概念及结构&#xff08;1&#xff09;栈的概念&#xff08;2&#xff09;栈的结构 2.栈的实现&#xff08;1&#xff09;类型和函数的声明&#xff08;2&#xff09;初始化栈&#xff08;3&#xff09;销毁&#xff08;4&#xff09;入栈&#xff08;5&#x…...

APT60DQ20BG-ASEMI新能源功率器件APT60DQ20BG

编辑&#xff1a;ll APT60DQ20BG-ASEMI新能源功率器件APT60DQ20BG 型号&#xff1a;APT60DQ20BG 品牌&#xff1a;ASEMI 封装&#xff1a;TO-3P 恢复时间&#xff1a;&#xff1e;50ns 正向电流&#xff1a;60A 反向耐压&#xff1a;200V 芯片个数&#xff1a;2 引脚数…...

[Android Framework] 系统 ANR 问题排查实践小结

文章目录 背景卡顿的定义:卡顿分类:卡顿原因汇总ANR 出现的原理应用层导致ANR系统导致ANR日志抓取traces.txt 是如何生成的分析思路与验证相关日志分析data/anr/traces.txt其他分析思路如何分析生成的 trace.html 文件呢?最后解决参考:背景 本文记录了工作中遇到的Andorid …...

【Unity】Text文本组件的一些操作

Unity的Text组件的几种常见的操作方法 Text组件是Unity中用于在UI界面上显示文本的组件。它包含了一些常见的属性和方法&#xff0c;可以用来控制文本的内容、外观和交互。以下是一些常见的Text组件的操作&#xff1a; 设置文本内容&#xff1a;通过直接在Unity编辑器中的Text…...

如何通过tomcat下载映射下载文件

1.1找到tomcat服务器中server.xml文件 !--doBase是静态资源路径位置&#xff0c; path作用相当于设置的key, doBase作用相当于value --> <Context path"/download" docBase"E:\testBackData"></Context>1.2 找到tomcat服务器中web.xml文…...

Redis的8种数据结构和应用场景介绍,面试题答案

面试原题&#xff1a;你用过Redis哪些数据结构&#xff1f;&#xff08;网易一面 2023&#xff09;(面试题来自牛客网) 参考答案 后面有 详细答案解析&#xff0c;帮助更快记忆~ 参考答案共652字符&#xff0c;阅读约需1分8秒&#xff1b;全文共8694字符&#xff0c;阅读约需…...

Log4Qt日志框架(1)- 引入到QT中

Log4Qt日志框架&#xff08;1&#xff09;- 引入到QT中 1 下载源码2 简介3 加入到自己的项目中3.1 使用库文件3.2 引入源文件 4 说明 1 下载源码 github&#xff1a;https://github.com/MEONMedical/Log4Qt 官方(版本较老)&#xff1a;https://sourceforge.net/projects/log4q…...

【算法刷题之哈希表篇(1)】

目录 1.哈希表基础理论2.leetcode-242. 有效的字母异位词&#xff08;1&#xff09;方法一&#xff1a;排序&#xff08;2&#xff09;方法二&#xff1a;哈希表 3.leetcode-349. 两个数组的交集&#xff08;1&#xff09;方法一&#xff1a;哈希表&#xff08;2&#xff09;方…...

uni-app 打包生成签名Sha1

Android平台打包发布apk应用&#xff0c;需要使用数字证书&#xff08;.keystore文件&#xff09;进行签名&#xff0c;用于表明开发者身份。 可以使用JRE环境中的keytool命令生成。以下是windows平台生成证书的方法&#xff1a; 安装JRE环境&#xff08;推荐使用JRE8环境&am…...

【Django】Django创建一个文件下载服务

当使用Django创建一个下载服务时&#xff0c;您可以设置一个视图来处理文件下载请求&#xff0c;并根据您的需求提供文件下载链接。以下是一个简单的示例&#xff0c;演示如何在Django中实现基本的文件下载服务&#xff1a; 创建Django项目和应用&#xff1a; 首先&#xff0c…...

Navicat for Mysql 显示 emoji 表情符号乱码问题 — 其它乱码情况都可参考

系统环境&#xff1a; 操作系统&#xff1a;MAC OS 10.11.6 MySQL&#xff1a;Server version: 5.6.21 MySQL Community Server (GPL) Navicat for MySQL: version 9.3.1 - standard 1、问题发现 在客户端执行用户注册&#xff0c;用户名包括 emoji 表情符号&#xff0c;注册完…...

《数字图像处理-OpenCV/Python》连载(2)目录

《数字图像处理-OpenCV/Python》连载&#xff08;2&#xff09;目录 本书京东优惠购书链接&#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏&#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第一部分 OpenCV-Python的基本操作 第1章 …...

Go学习-Day4

文章目录 Go学习-Day4函数值传递&#xff0c;引用传递常用的函数 异常处理数组Slice切片 Go学习-Day4 个人博客&#xff1a;CSDN博客 函数 值传递&#xff0c;引用传递 值传递直接拷贝值&#xff0c;一般是基本数据类型&#xff0c;数组&#xff0c;结构体也是引用传递传递…...

将el-dialog封装成函数调用

1、 使用Vue实例化方法 // MyDialog.js import Vue from vue export const openFormDialog function ({ props {}, events {} }) {const vm new Vue({data () {return {form: {}}},render () {return (<el-dialogvisible{true}{...{ props }}{...{ on: events }}onClos…...

Windows10批处理命令行设置环境变量笔记,无需重新安装python与chrome

近期&#xff0c;工作中经常安装、部署python生产、开发环境&#xff0c;比较麻烦&#xff0c;也没有心情去优化。突然&#xff0c;我的电脑崩溃了&#xff0c;在重新安装电脑的过程中&#xff0c;保留了原来的安装软件&#xff08;有的没有放在系统盘中&#xff09;&#xff0…...

统计学补充概念07-比较树

概念 在层次聚类中&#xff0c;聚类结果可以以树状结构表示&#xff0c;通常称为树状图&#xff08;Dendrogram&#xff09;。树状图展示了数据点如何被合并或分裂以形成聚类的层次结构。通过观察树状图&#xff0c;可以更直观地理解数据点之间的相似性和关系。 在比较树状图…...

设计原则 --《设计模式之美》总结篇

本文是阅读《设计模式之美》的总结和心得&#xff0c;跳过了书中对面试和工作用处不大或不多的知识点&#xff0c;总结总共分为三章&#xff0c;分别是面对对象编程范式、设计原则和设计模式。 设计模式是代码设计时的一些经验总结。相比于设计模式&#xff0c;设计原则更抽象。…...

Day16-蜗牛影城后端开发

蜗牛影城后端开发 一 多表关联查询 电影集合movie的type(类别)字段关联到电影类别movieType表的_id(主键) 二 蜗牛影城后端开发 1 数据的导入导出 2 用户模块 UserModel.js //导入mongoose,并解构出Schema(类)和model(对象) const {Schema,model} =...

axios / fetch 实现 stream 流式请求

axios 是一个支持node端和浏览器端的易用、简洁且高效的http库。本文主要介绍 axios 如何实现 stream 流式请求&#xff0c;注意这里需要区分 node 环境和浏览器环境。 一、node端 代码演示&#xff1a; const axios require(axios);axios({method: get,url: http://tiven.c…...

Pytorch学习:torchvison.transforms常用包(ToTensor、Resize、Compose和RandomCrop)

torchvision.transforms常用包 1. torchvision.transforms.ToTensor2. torchvision.transforms.Resize3. torchvision.transforms.Compose4. torchvision.transforms.Normalize5. torchvision.transforms.RandomCrop 1. torchvision.transforms.ToTensor 将PIL Image或ndarray…...

算法通关村十二关 | 字符串转换

1. 转换小写字母 LeetCode709&#xff1a;给你一个字符串s&#xff0c;将该字符串中的大写字母转换成相同的小写字母&#xff0c;返回新的字符串。 每个字母都是有确定的ASCII的&#xff0c;可以根据码表操作子字符串&#xff0c;常见的ASCII范围是&#xff1a; a-z: 97-122, …...

前端进阶Html+css09----BFC模型

1.什么是BFC模型 全称是&#xff1a;Block formatting context&#xff08;块级格式化上下文&#xff09;&#xff0c;是一个独立的布局环境&#xff0c;不受外界的影响。 2.FC,BFC,IFC 元素在标准流里都属于一个FC&#xff08;Formatting Context&#xff09;。 块级元素的布…...

重排链表(C语言)

题目&#xff1a; 示例&#xff1a; 思路&#xff1a; 这题我们将使用栈解决这个问题&#xff0c;利用栈先进后出的特点&#xff0c;从链表的中间位置进行入栈&#xff0c;寻找链表的中间位置参考&#xff1a;删除链表的中间节点&#xff0c;之后从头开始进行连接。 本题使用…...

el-table动态合并单元格

el-table使用这个方法合并单元格&#xff0c;:span-method“hbcell” <el-table size"small" :data"table.data" border empty-text"暂无数据" :cell-style"cellStyle" :header-cell-style"tableHeaderColor":span-meth…...

html元素

文章目录 html基本结构属性语义化为什么要语义化 示例head中属性样式一些概念块级元素与行级元素空白折叠 html编程没有css的html显示逻辑 html基本结构 html基本单元就是元素&#xff0c;每个元素有标记和属性&#xff0c;如&#xff1a; <a href"...">www&…...

push github

一、生成密钥 打开git bash执行下面指令&#xff0c;Enter下一步Enter下一步..生成ssh key 密钥&#xff1b; ssh-keygen -t rsa 二、 复制公共密钥到git hub 登录github&#xff0c;在选项setting >> SSH and GPG key >> add new ssh添加刚才的公钥地址即可 验证…...

ps如何做psd模板下载网站/高端企业建站公司

描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5(图1) 图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和。 注意&#xff1a;路径上的每一步只能…...

网站开发产品设计书/网络seo公司

注意&#xff1a;文档中的Makefile尽量不要复制 容易出问题 特殊变量 $&#xff1a;当前目标$^&#xff1a;当前规则中的所有依赖$<&#xff1a;依赖中的第一个$$&#xff1a;当前执行的进程编号$*&#xff1a;模式规则中所有%匹配的部分$?&#xff1a;模式规则中所有比目…...

wordpress 微博评论插件/网络营销的策划流程

下面是一软件报的一位读者朋友写给‘软件报’编辑的信&#xff1a;。。。。。。。。。。。。。。。。。&#xff08;删&#xff09;感谢软件报杨编辑对我的信任&#xff0c;她委托我就上面这位读者朋友的提问给出一些答复。其实&#xff0c;我本人尽管是一位90年代初的计算机软…...

手机端网站html好看的模板/排名优化哪家好

注册码&#xff1a; {"email": "xiaosongxiaosong.me","product_key": "d419f6-de89e9-0aae59-2acea1-07f92a" } 安装步骤&#xff1a; 然后保存即可。...

建设微擎网站怎么公安备案/福州网seo

上一篇中谈了盛大可以利用丰富的代表作品&#xff0c;来定制扑克牌。那么&#xff0c;定制扑克有什么优势呢&#xff1f;我来谈几点&#xff1a;》使用度高&#xff1a;从而提升认知度》易传播&#xff1a;体积小&#xff0c;易于携带&#xff0c;》保存度高&#xff1a;具有生…...

营销培训体系/海外网站seo优化

2019独角兽企业重金招聘Python工程师标准>>> 1、tomcat 启动报 processEngine NullPointerException&#xff0c; Service 层用到的activiti 的几个工具类都包无法注入的问题&#xff0c;Error creating bean with name processEngine 解决&#xff1a; 中午的时候将…...