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

Mysql 11: 存储过程全解——从创建到使用

存储过程Stored Procedure是 MySQL 中预编译在数据库服务器上的 SQL 语句集合可以封装复杂业务逻辑、减少网络交互、提升执行效率是数据库开发的核心技能。本文围绕图片中的知识点从创建、使用、删除到拓展带你彻底掌握 MySQL 存储过程。一、核心知识点总览大类细分知识点核心作用1. 创建存储过程1) 变量的使用定义存储过程内的局部变量2) 变量的修改修改变量值实现逻辑计算3) 流程控制IF/WHILE/CASE等控制语句2. 使用存储过程调用存储过程执行预编译逻辑3. 删除存储过程删除不再使用的存储过程4. 拓展一查看存储过程3 种查看存储过程的方法5. 拓展二修改存储过程修改存储过程逻辑6. 拓展三光标的使用遍历查询结果集二、1. 创建存储过程1.1 基础语法DELIMITER // -- 临时修改结束符避免与存储过程内的;冲突 CREATE PROCEDURE 存储过程名(参数列表) BEGIN -- 存储过程体SQL语句、变量、流程控制 END // DELIMITER ; -- 恢复默认结束符关键说明DELIMITER用于临时修改语句结束符因为存储过程体内部需要用;分隔语句避免提前结束创建。1.2 变量的使用与修改1变量定义-- 定义局部变量DECLARE 变量名 数据类型 [DEFAULT 默认值] DECLARE stu_count INT DEFAULT 0; DECLARE avg_score DECIMAL(5,2) DEFAULT 0.00;2变量赋值修改-- 方式1直接赋值 SET stu_count 10; -- 方式2查询结果赋值INTO SELECT COUNT(*) INTO stu_count FROM student; SELECT AVG(score) INTO avg_score FROM score;1.3 流程控制1IF 条件判断IF 条件 THEN -- 执行语句 ELSEIF 条件 THEN -- 执行语句 ELSE -- 执行语句 END IF;2WHILE 循环WHILE 条件 DO -- 循环体 END WHILE;1.4 完整创建示例需求统计学生表人数根据人数输出不同提示-- 1. 准备测试表 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, age INT NOT NULL ); INSERT INTO student (name, age) VALUES (张三,18),(李四,19),(王五,18); -- 2. 创建存储过程 DELIMITER // CREATE PROCEDURE count_student() BEGIN -- 1. 定义变量 DECLARE stu_count INT DEFAULT 0; -- 2. 变量赋值查询学生人数 SELECT COUNT(*) INTO stu_count FROM student; -- 3. 流程控制IF判断 IF stu_count 5 THEN SELECT 学生人数超过5人 AS tip; ELSEIF stu_count 0 THEN SELECT CONCAT(学生人数为, stu_count) AS tip; ELSE SELECT 暂无学生 AS tip; END IF; END // DELIMITER ;三、2. 使用存储过程调用语法CALL 存储过程名(参数);示例-- 调用刚才创建的存储过程 CALL count_student();运行结果tip学生人数为3四、3. 删除存储过程语法DROP PROCEDURE [IF EXISTS] 存储过程名;示例-- 删除存储过程 DROP PROCEDURE IF EXISTS count_student;说明IF EXISTS避免存储过程不存在时报错。五、4. 拓展一查看存储过程3 种方法方法一查看所有存储过程SHOW PROCEDURE STATUS WHERE db DATABASE();方法二查看存储过程的创建语句SHOW CREATE PROCEDURE count_student;方法三从系统表查询详细信息SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_NAME count_student AND ROUTINE_SCHEMA DATABASE();六、5. 拓展二修改存储过程MySQL 没有直接修改存储过程的语法推荐先删除再重建-- 1. 删除旧存储过程 DROP PROCEDURE IF EXISTS count_student; -- 2. 重新创建修改后的存储过程 DELIMITER // CREATE PROCEDURE count_student() BEGIN DECLARE stu_count INT DEFAULT 0; SELECT COUNT(*) INTO stu_count FROM student; -- 修改逻辑新增年龄统计 DECLARE avg_age DECIMAL(5,2) DEFAULT 0.00; SELECT AVG(age) INTO avg_age FROM student; SELECT CONCAT(学生人数, stu_count, 平均年龄, avg_age) AS tip; END // DELIMITER ;七、6. 拓展三光标的使用遍历结果集光标Cursor用于逐行遍历查询结果集适合批量处理数据。语法-- 1. 声明光标 DECLARE 光标名 CURSOR FOR 查询语句; -- 2. 打开光标 OPEN 光标名; -- 3. 读取数据FETCH FETCH 光标名 INTO 变量列表; -- 4. 关闭光标 CLOSE 光标名;完整示例DELIMITER // CREATE PROCEDURE cursor_demo() BEGIN -- 1. 定义变量 DECLARE s_id INT; DECLARE s_name VARCHAR(20); DECLARE done INT DEFAULT FALSE; -- 2. 声明光标 DECLARE cur_student CURSOR FOR SELECT id, name FROM student; -- 3. 声明循环结束条件 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done TRUE; -- 4. 打开光标 OPEN cur_student; -- 5. 循环遍历 read_loop: WHILE NOT done DO FETCH cur_student INTO s_id, s_name; IF NOT done THEN -- 处理数据打印学生信息 SELECT CONCAT(ID:, s_id, 姓名:, s_name) AS info; END IF; END WHILE read_loop; -- 6. 关闭光标 CLOSE cur_student; END // DELIMITER ; -- 调用 CALL cursor_demo();八、核心总结存储过程本质预编译的 SQL 集合封装业务逻辑减少网络交互核心操作CREATE PROCEDURE创建、CALL调用、DROP PROCEDURE删除关键语法DELIMITER修改结束符、变量定义、流程控制、光标遍历适用场景复杂业务逻辑、批量数据处理、定时任务

相关文章:

Mysql 11: 存储过程全解——从创建到使用

存储过程(Stored Procedure)是 MySQL 中预编译在数据库服务器上的 SQL 语句集合,可以封装复杂业务逻辑、减少网络交互、提升执行效率,是数据库开发的核心技能。本文围绕图片中的知识点,从创建、使用、删除到拓展&#…...

龙芯k - 久久派开发环境搭建及内核升级(上)撞

一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

计及阴影遮挡效应的光伏阵列拓扑 PSO 重构优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

XLR8Servo_vhdl:FPGA硬件加速的高精度伺服控制方案

1. XLR8Servo_vhdl 加速伺服控制库深度解析1.1 项目定位与工程痛点XLR8Servo_vhdl 是专为 Alorium Technology XLR8 开发板设计的硬件加速型伺服电机控制库,其核心目标是彻底解决传统 Arduino Servo 库在实时性、资源占用和功能冲突三大维度上的固有缺陷。该库并非软…...

计及能量枢纽(EH)精细化建模的源荷储协调优化:通过矩阵建模法描述能源转换效率,利用分支定界法求解多能转换的最优路径研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

AX-12A舵机底层驱动与Dynamixel协议实战解析

1. AX-12A智能舵机底层驱动技术解析AX-12A是由韩国Robotis公司推出的经典串行总线式智能舵机,自2004年发布以来,已成为教育机器人、仿生机构与小型机电系统中事实上的工业级执行器标准。其核心价值不仅在于300可编程角度范围、12V供电下1.5Nm额定扭矩与内…...

影视专业生的C语言学习

我是一个来自影视专业的一个学生,但是往后看了这个专业出路并不适合我,所以自学c语言等技能来提升自己,为自己以后找工作多一个选项。学习编程的目标:熟练掌握c语言以及c我打算每周花20小时的时间来学习编程最想进入的公司是字节跳…...

态势感知中态与势的条件概率与联合概率

这是一个关于态势感知(Situation Awareness, SA)理论中核心概念"态"(State)与"势"(Trend/Development)的概率建模问题。下面将从概率论与贝叶斯网络的角度,系统阐述态与势的…...

AD9833 DDS信号发生器驱动设计与嵌入式实践

1. AD9833信号发生器模块底层驱动技术解析AD9833是一款由Analog Devices(ADI)推出的低功耗、可编程波形发生器芯片,采用28引脚SSOP封装,通过标准SPI接口与主控MCU通信。其核心功能是生成高精度、频率可调的正弦波、三角波和方波信…...

RK3588嵌入式Linux开发实战:uboot镜像合成与rkbin文件整合指南

1. RK3588开发必备:理解uboot镜像合成的核心意义 刚接触RK3588开发板时,很多工程师都会困惑:为什么编译好的uboot不能直接烧录?这个问题我最初也踩过坑。实际上,Rockchip平台的启动流程比传统嵌入式系统更复杂&#xf…...

有没有类似trello或者teambition的本地版的任务管理工具?盘点7款

很多企业在找任务管理工具时,最先想到的是 Trello 这类看板工具,或者 Teambition 这类团队协作平台。问题也往往出在这里:在线版好上手,但一旦涉及内网部署、数据分级、权限审计、长期留存、与内部系统打通,纯 SaaS 方…...

NGLedFlasher:嵌入式多LED非阻塞时序控制库

1. NGLedFlasher 库深度解析:面向嵌入式系统的多LED非阻塞时序控制方案1.1 项目定位与工程价值NGLedFlasher 是一个轻量级、无阻塞(non-blocking)的 Arduino 兼容库,其核心设计目标并非简单实现“LED闪烁”,而是解决嵌…...

LLM 算法岗 | 八股问答()· 强化学习与 RLHF碧

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

Google疯了!AI全面免费,这下全网都要变天了!

太特么疯狂了!谷歌刚刚发布的 Gemma 4 开源模型,简直是要了所有付费 AI 的命,整个行业的游戏规则被瞬间掀翻。划重点:AI 彻底进入“白嫖时代”了!你现在完全可以利用 Ollama 这类工具,把 Gemma 4 直接接进 …...

不用二维码、不用车载定位,这篇论文把 AGV 视觉导航换了个思路

这篇 AGV 视觉论文很有意思:车上几乎不装定位传感器,靠“车间上方一只相机”也能导航? 摘要 这次换一篇和前面几篇都不重复的 AGV 视觉论文,不讲托盘检测、不讲叉车装卸、也不讲天花板视觉里程计,而是分析一篇很有“工…...

【CANNBot学习周】4.13~4.16入门课程来袭

经历了上一期“CANNBot发布:畅享算子开发新体验”,相信你对解锁智能化昇腾CANN算子开发已经跃跃欲试。 CANNBot学习周入门课程来袭,包含4门从易到难的实操课程,带你从 0 到 1 掌握核心技能!课程覆盖Ascend C、PyPTO和…...

javaSE之图书管理系统

思路:一个图书管理系统项目的构建本次的代码是实现一个图书管理系统要求,有登入系统和用户选择系统,之后还有用户操作交换系统,和图书管理系统,具体思路如下创建以下类,加粗部分为包test:Testbo…...

论文复现基于改进人工鱼群法的机器人,无人机,无人车,无人船的路径规划算法,MATLAB

论文复现基于改进人工鱼群法的机器人,无人机,无人车,无人船的路径规划算法,MATLAB 在基本算法中加入了自适应视野和步长,加入了启发选择机制 该代码运行结果是那四个栅格地图的一个,只包含IAFSA的结果 运行…...

鱼皮超级智能体文件读写报错

Spring AI Kryo 序列化报错:Encountered unregistered class ID 解决方案在开发 Spring AI 聊天记忆功能时,采用 Kryo 实现消息的文件持久化存储,运行过程中突然报出 com.esotericsoftware.kryo.KryoException: Encountered unregistered cl…...

去哪儿商户端分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 部分python代码data {"departur…...

安装 Nunchaku

1、查看torch版本 命令行输入 C:\Users\用户名\Documents\ComfyUI\.venv\Scripts> python -m pip show torch 输出 版本信息 Name: torch Version: 2.11.0 2、查看python版本 输入命令: PS C:\Users\用户名\Documents\ComfyUI\.venv\Scripts> python --versio…...

Jetson Nano + 镭神16线雷达:手把手教你将TARE自主探索算法部署到阿克曼机器人

Jetson Nano与镭神16线雷达:TARE算法在阿克曼机器人上的实战部署指南 硬件选型与系统架构设计 当我们需要将TARE自主探索算法部署到真实机器人平台时,硬件选型直接决定了后续开发流程的顺畅程度。经过多次项目实践,我发现Jetson Nano开发板与…...

Docker部署Ollama模型墒

前言 Kubernetes 本身并不复杂,是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps,这些基础组件简单直接,甚至显得有些枯燥。但后来我…...

嵌入式设备电量显示实战:MCP3421 ADC采集从原理到代码全解析(附避坑指南)

嵌入式设备电量显示实战:MCP3421 ADC采集从原理到代码全解析(附避坑指南) 在移动设备与物联网终端的设计中,精确的电量监测如同设备的"生命体征监测仪"——它不仅关乎用户体验,更直接影响系统稳定性。传统电…...

手机维修师傅的“内功心法”:看懂手机屏排线上的MIPI、I2C、SPI信号,快速定位不开机、花屏、触摸失灵故障

手机维修实战:通过屏排线信号诊断显示与触摸故障的黄金法则 当你面对一部摔落后屏幕全黑但能听见系统声音的iPhone,或是进水后出现彩色条纹的安卓手机时,90%的维修师傅会直接更换屏幕总成。而真正的高手,会拿起万用表和示波器&…...

FastbootEnhance:5步掌握Windows平台最强安卓刷机工具

FastbootEnhance:5步掌握Windows平台最强安卓刷机工具 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 还在为复杂的Fastboot命令行操作…...

2026年OpenClaw怎么搭建?阿里云6分钟新手部署OpenClaw,千问大模型安装指南

2026年OpenClaw怎么搭建?阿里云6分钟新手部署OpenClaw,千问大模型安装指南。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服…...

代码随想录一刷记录Day25——leetcode491.递增子序列

前言 之前就有刷代码随想录,但奈何总是三天打鱼两天晒网,而且刷的也很囫囵吞枣,于是乎决定参加代码随想录训练营,准备精刷一遍,希望自己能坚持下去,结营后自己的算法水平能更上一个level,冲ing…...

2026年怎么搭建OpenClaw?2分钟新手本地部署OpenClaw及百炼Coding Plan教程

2026年怎么搭建OpenClaw?2分钟新手本地部署OpenClaw及百炼Coding Plan教程。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、Ski…...

藏在底层的“树之家族”:从二叉树到B+树,你天天用却未必懂

写在前面“二叉树、二叉查找树、平衡二叉树、红黑树、B树、B树……这些数据结构,我好像只在课本上见过。平时写业务代码,一个ArrayList、HashMap走天下,谁没事自己写树啊?”这是很多后端开发者的真实想法。包括我自己,…...