MySQL--存储过程--详解/示例

MySQL中的存储过程详解

在MySQL数据库中,存储过程是一种预先编译好的SQL代码块,可以被重复调用。它们允许我们将常用的操作逻辑封装起来,并简化数据库交互。本文将介绍MySQL存储过程的基本语法和使用示例。

创建存储过程

使用CREATE PROCEDURE语句创建存储过程。以下是一个简单的示例:

DELIMITER //CREATE PROCEDURE get_user_count()
BEGINSELECT COUNT(*) FROM users;
END //DELIMITER ;

上述代码创建了一个名为get_user_count()的存储过程,该程序返回用户表中记录数量。

调用存储过程

要调用已经创建好的存储过程,可以使用CALL语句。下面是一个调用刚才创建的get_user_count()函数并打印结果的示例:

CALL get_user_count();

执行以上代码后会输出用户表中记录数量。

传递参数

你还可以向存储过程传递参数以实现更灵活和定制化功能。以下是一个接收输入参数并返回指定用户信息的示例:

DELIMITER //CREATE PROCEDURE get_user_info(IN user_id INT)
BEGINSELECT * FROM users WHERE id = user_id;
END //DELIMITER ;

在上述示例中,我们定义了一个输入参数 user_id ,然后通过 WHERE id = user_id 来查询对应的用户信息。

调用该存储过程并传递参数的示例:

CALL get_user_info(1);

返回结果

有时候,我们需要从存储过程中返回一个或多个结果。可以使用OUT参数来实现这一功能。以下是一个示例:

DELIMITER //CREATE PROCEDURE calculate_sum(IN a INT, IN b INT, OUT total INT)
BEGINSET total = a + b;
END //DELIMITER ;

在上述代码中,我们定义了两个输入参数 ab ,还定义了一个输出参数 total 。存储过程将计算 a + b 的和,并将结果赋值给输出参数。

调用该存储过程并获取返回结果的示例:

SET @result = 0;
CALL calculate_sum(3, 5, @result);
SELECT @result; -- 输出8(3+5)

示例

示例1-序号生成器

当需要在数据库中生成连续的序号时,可以使用存储过程来实现。下面是一个使用存储过程实现序号生成器的示例:

DELIMITER //CREATE PROCEDURE generate_serial_number(IN prefix VARCHAR(10), IN length INT, OUT serial_num VARCHAR(20))
BEGINDECLARE next_val INT;-- 初始化序列值为0SET next_val = 0;-- 获取当前最大的序列值SELECT MAX(SUBSTRING(serial_number, LENGTH(prefix) + 1)) INTO next_val FROM serial_numbers WHERE serial_number LIKE CONCAT(prefix, '%');-- 增加下一个序列值SET next_val = next_val + 1;-- 构建新的序列号(添加前缀和补零)SET serial_num = CONCAT(prefix, LPAD(next_val, length - LENGTH(prefix), '0'));END //DELIMITER ;

上述代码创建了一个名为generate_serial_number()的存储过程,它接收三个参数:prefix(前缀),length(总长度),以及 serial_num(输出参数,用于保存生成的序列号)。

该存储过程首先通过查询找到已存在记录中具有相同前缀的最大数字部分,并将其赋值给变量 next_val。然后将 next_val 加一得到下一个要生成的数字。

最后,将前缀和补零后的新数字连接起来形成完整的新序列号,并将其赋值给输出参数 serial_num

以下是调用该存储过程的示例:

SET @serial_number = '';
CALL generate_serial_number('ABC', 6, @serial_number);
SELECT @serial_number; -- 输出 ABC000001CALL generate_serial_number('XYZ', 5, @serial_number);
SELECT @serial_number; -- 输出 XYZ00001

当然!下面是一些其他实用的存储过程示例:

示例2-计算两个数字的和

DELIMITER //CREATE PROCEDURE calculate_sum(IN a INT, IN b INT, OUT total INT)
BEGINSET total = a + b;
END //DELIMITER ;

以上存储过程接收两个输入参数 ab,将它们相加并将结果赋值给输出参数 total

示例3-根据条件筛选用户

DELIMITER //CREATE PROCEDURE get_users_by_condition(IN condition VARCHAR(100))
BEGINSET @query = CONCAT('SELECT * FROM users WHERE ', condition);PREPARE stmt FROM @query;EXECUTE stmt;DEALLOCATE PREPARE stmt;
END //DELIMITER ;

该存储过程接收一个输入参数 condition,根据指定的条件查询用户表,并返回符合条件的所有用户信息。

示例4-执行批量插入操作

DELIMITER //CREATE PROCEDURE bulk_insert_users(IN num_rows INT)
BEGINDECLARE i INT DEFAULT 0;START TRANSACTION;WHILE i < num_rows DO INSERT INTO users (name) VALUES (CONCAT('User', i+1));SET i = i + 1;END WHILE;COMMIT;END //DELIMITER ;

上述示例中,我们创建了一个名为 bulk_insert_users() 的存储过程。它接收一个输入参数 num_rows,表示要插入多少行数据。在事务内部使用循环语句进行批量插入操作。

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

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

相关文章

前端JavaScript企业框架的全面解析

引言 在现代Web开发中&#xff0c;前端JavaScript框架扮演着至关重要的角色。它们提供了丰富的功能和工具&#xff0c;帮助开发人员构建功能强大且易于维护的企业级应用程序。本篇博客将全面解析前端JavaScript企业框架&#xff0c;介绍其优势、使用场景和常见的框架选择。 什…

第三届OceanBase数据库大赛启动,升级为国家级竞赛

近日&#xff0c;第三届OceanBase数据库大赛启动报名。本届大赛进一步升级为全国大学生计算机系统能力大赛&#xff0c;由系统能力培养研究专家组发起&#xff0c;全国高等学校计算机教育研究会、系统能力培养研究项目发起高校主办&#xff0c;OceanBase承办&#xff0c;旨在培…

【Linux】Linux工具篇(yum、vim、gcc/g++、gdb、Makefile、git)

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f681; 个人主页&#xff1a;不 良 &#x1f525; 系列专栏&#xff1a;&#x1f6f9;Linux &#x1f6f8;C &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff…

nvm命令

1. 常见命令 1. nvm -v //查看nvm版本 nvm --version &#xff1a;显示 nvm 版本 2. nvm list //显示版本列表 nvm list &#xff1a;显示已安装的版本&#xff08;同 nvm list installednvm list installed&#xff1a;显示已安装的版本nvm list available&#xff1a;显示所有…

【java】常用工具——包装类

1. Java中的数据类型 #mermaid-svg-8QZByhDXxJpYzQ8U {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8QZByhDXxJpYzQ8U .error-icon{fill:#552222;}#mermaid-svg-8QZByhDXxJpYzQ8U .error-text{fill:#552222;stroke…

图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009

首先找到明星数据 可以看到有一个sheet1,是,记录了所有的关系的数据 然后比如我们搜索一个撒贝宁,可以看到撒贝宁的数据 然后这个是构建的CQL语句 首先我们先去启动服务 neo4j console 然后我们再来看一下以前导入的,可以看到导入很简单, 就是上面有CQL 看一下节点的属性

【HarmonyOS】鸿蒙应用获取华为帐号手机号码步骤(API7及以下)

【写在前面】 本文主要介绍使用API7及以下版本开发HarmonyOS应用时&#xff0c;通过华为帐号SDK和云侧接口获取手机号码的主要开发步骤&#xff0c;注意&#xff1a;开发过程中集成的华为帐号SDK仅支持API7及以下版本的HarmonyOS应用。 【前提准备】 1、HarmonyOS应用已申请获…

搭载KaihongOS的工业平板、机器人、无人机等产品通过3.2版本兼容性测评,持续繁荣OpenHarmony生态

近日&#xff0c;搭载深圳开鸿数字产业发展有限公司&#xff08;简称“深开鸿”&#xff09;KaihongOS软件发行版的工业平板、机器人、无人机等商用产品均通过OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;3.2 Release版本兼容性测评&#xff0c;获颁O…

centos7安装 postgresql postgis pgrouting

centos7 源码编译太烦了。直接yum install ...... 一、版本信息&#xff1a; CentOS版本&#xff1a;CentOS Linux release 7.9.2009 (Core) PostgreSQL版本&#xff1a; PostgreSQL 12.0 PostGIS版本&#xff1a;postgis31 二、PostgresSQL PostGIS 安装 1、官网安装链接&…

ue5读取外部文件

准备环境 我的环境是win10&#xff0c;ue5.1.1&#xff0c;cpux86。 创建工程时&#xff0c;需要选择C模式 这样在Content Browser中会出现C Classes文件夹&#xff0c;下面有一个本项目命名的文件夹&#xff0c;鼠标右键可以看到New C Class选项。 新建类的时候选择父类Blue…

JAVA Bean 对象的作用域和生命周期

Bean 作用域和生命周期 1. 作用域1.1 作用域定义1.2 Bean 的 6 种作⽤域1.2.1 singleton(单例作⽤域)1.2.2 prototype (原型作⽤域 / 多例作⽤域)1.2.3 request&#xff1a;(请求作⽤域)1.2.4 session&#xff1a;(会话作⽤域)1.2.5 application&#xff1a;(全局作⽤域)1.2.6 …

【Redis】Redis 的学习教程(五)之 SpringBoot 集成 Redis

在前几篇文章中&#xff0c;我们详细介绍了 Redis 的一些功能特性以及主流的 java 客户端 api 使用方法。 在当前流行的微服务以及分布式集群环境下&#xff0c;Redis 的使用场景可以说非常的广泛&#xff0c;能解决集群环境下系统中遇到的不少技术问题&#xff0c;在此列举几…

Vector

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb;vector概念&#x1f449;&#x1f3fb;vector constr…

Node + Express 后台开发 —— 起步

Node Express 后台开发 —— 起步 前面陆续学习了一下 node、npm、模块&#xff0c;也稍尝试 Express&#xff0c;感觉得换一个思路加快进行。 比如笔者对前端的开发已较熟悉&#xff0c;如果领导给一个内部小网站的需求&#xff0c;难道说你得给我配置一个后端&#xff1f;…

selenium 选定ul-li下拉选项中某个指定选项

场景&#xff1a;selenium的下拉选项是ul-li模式&#xff0c;选定某个指定的选项。 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 显示等待def select_li(self, text, *ul_locator):"…

六图备份 大容量图片

1.1、切割&#xff08;9*16&#xff09; # 参考网址&#xff1a;https://blog.csdn.net/weixin_42182534/article/details/125773141?ops_request_misc&request_id&biz_id102&utm_termpython%E6%88%AA%E5%8F%96%E5%9B%BE%E7%89%87%E7%9A%84%E4%B8%80%E9%83%A8%E5%…

为什么在Spring中使用@Autowired时会提示Field injection is not recommended 而@Resource不会

在使用IDEA进行开发时&#xff0c;在字段上使用Spring的依赖注入注解Autowired后会出现如下警告 Field injection is not recommended (字段注入是不被推荐的) 这个原因具体可以看看&#xff1a; 【注解使用】使用Autowired后提示&#xff1a;Field injection is not recomme…

【抖音小玩法-弹幕游戏】开发者功能测试报告提交模板

背景 字节有明确的要求&#xff0c;准入和准出更加严格&#xff0c;要求有明确的测试报告。格式如下&#xff1a; *本文参考字节wiki&#xff1a;开发者功能测试报告提交模板 网络兼容性 请确认在以下网络类型验证过插件功能 WIFI 4G 测试机型 请罗列验证过的双端机型 An…

python+django+mysql高校校园外卖点餐系统--计算机毕设项目

本文的研究目标是以高校校园外卖点餐为对象&#xff0c;使其高校校园外卖点餐为目标&#xff0c;使得高校校园外卖点餐的信息化体系发展水平提高。论文的研究内容包括对个人中心、美食分类管理、用户管理、商家管理、美食信息管理、工作人员管理、安全检查管理、系统管理、订单…

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 1.Matlab实现GRU门控循环单元时间序列预测未…