【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)下

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)

带循环语句WHILE存储过程


此存储过程名为 IncreaseSalary,它会遍历 employees 表中的每个员工,并将他们的薪水增加 10%。


CREATE PROCEDURE IncreaseSalary()
BEGIN
    DECLARE emp_count INT;
    DECLARE i INT DEFAULT 0;
    DECLARE emp_id INT;
    DECLARE emp_salary DECIMAL(10, 2);
    -- 获取员工数量
    SELECT COUNT(*) INTO emp_count FROM employees;
    -- 循环遍历并更新薪水
    WHILE i < emp_count DO
        SET i = i + 1;
        -- 获取当前员工的id和薪水
        SELECT id, salary INTO emp_id, emp_salary FROM employees WHERE id = i;
        -- 对薪水进行增加
        UPDATE employees SET salary = emp_salary * 1.1 WHERE id = emp_id;
    END WHILE;
END;


调用存储过程进行检验

CALL IncreaseSalary();


检验结果

原来薪水


6e4f475b27e1cc0c7ea6c762413edec5_a7ab0e4ef4ff4f9b975f612f34e30ebf.png


当前薪水


e8f17b42e73946014c3e245bc4464e10_10ac5bb250b442968042fb929a8ab052.png


带循环语句REPEAT UNTIL存储过程


此存储过程名为 DisplayEmployeesWithRepeatUntil,它会使用 REPEAT…UNTIL 循环遍历 employees 表中的每个员工,并输出他们的信息。


DELIMITER $$
CREATE PROCEDURE DisplayEmployeesWithRepeatUntil()
BEGIN
--声明变量
    DECLARE emp_count INT;--员工数量
    DECLARE i INT DEFAULT 1;
    DECLARE emp_id INT;
    DECLARE emp_name VARCHAR(50);
    DECLARE emp_age INT;
    DECLARE emp_salary DECIMAL(10, 2);
    -- 获取员工数量
    SELECT COUNT(*) INTO emp_count FROM employees;
    -- 循环遍历并输出员工信息
    REPEAT
        -- 获取当前员工信息
        SELECT id, name, age, salary INTO emp_id, emp_name, emp_age, emp_salary FROM employees WHERE id = i;
        -- 输出员工信息
        SELECT CONCAT('ID: ', emp_id, ', Name: ', emp_name, ', Age: ', emp_age, ', Salary: ', emp_salary) AS employee_info;
        SET i = i + 1;
    UNTIL i > emp_count END REPEAT;
END$$
DELIMITER ;


调用存储过程进行检验

CALL DisplayEmployeesWithRepeatUntil();


检验结果


0fe2f610d018c98a1409628663887acd_4cc3e680a3c5479789e5a7c466f6fb0e.png


带循环语句LOOP存储过程


此存储过程名为 DisplayEmployeesWithLoop,它会使用LOOP循环遍历 employees 表中的每个员工,并输出他们的信息。


CREATE PROCEDURE DisplayEmployeesWithLoop()
BEGIN
    DECLARE emp_count INT;
    DECLARE i INT DEFAULT 1;
    DECLARE emp_id INT;
    DECLARE emp_name VARCHAR(50);
    DECLARE emp_age INT;
    DECLARE emp_salary DECIMAL(10, 2);
    -- 获取员工数量
    SELECT COUNT(*) INTO emp_count FROM employees;
    -- 循环遍历并输出员工信息
    emp_loop: LOOP
        -- 获取当前员工信息
        SELECT id, name, age, salary INTO emp_id, emp_name, emp_age, emp_salary FROM employees WHERE id = i;
        -- 输出员工信息
        SELECT CONCAT('ID: ', emp_id, ', Name: ', emp_name, ', Age: ', emp_age, ', Salary: ', emp_salary) AS employee_info;
        SET i = i + 1;
        IF i > emp_count THEN
            LEAVE emp_loop;
        END IF;
    END LOOP;
END;


调用存储过程检验

CALL DisplayEmployeesWithLoop();


检验结果

85ccfeb2584421b42af438ddd035c353_03a3f2c658444cc5bc91bcff23b053d0.png


查询存储过程


--查询所有数据库
SHOW PROCEDURE STATUS;
--查询指定数据库test。以上所有例子都基于test数据库
SHOW PROCEDURE STATUS WHERE db='test'


结果


cb41d29269536ea484a09b92e924469d_625e6a0751e349a7971ea0e60df7ebec.png


查询存储过程定义源码


SHOW CREATE PROCEDURE 存储过程名;
SHOW CREATE PROCEDURE categorizeEmployee;


结果


a51fcb3fa050764b1826cff772e94cf7_7bb31b1dff1146a997d4e6bd2ed7f4b0.png


删除存储过程


DROP PROCEDURE 存储过程名;


🌟写在最后


最后感谢大家对于此博文的阅读,如对存储过程有补充或者疑问之处,请大家在评论区留言。感谢大家的指正与点评。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
3月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
475 7
|
人工智能 关系型数据库 OLAP
聚光灯已就位!阿里云瑶池数据库邀你征战Cursor首届实战征文大赛
阿里云AnalyticDB携手Cursor中文社区,正式发起首届实战征文大赛!我们诚邀开发者融合Cursor的智能编程能力与AnalyticDB PostgreSQL提供的Supabase服务进行项目开发,让优秀项目被专家看见、被机遇拥抱!
|
7月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
354 1
|
8月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
7月前
|
SQL 数据建模 关系型数据库
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
1335 4
|
4月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
413 0
|
11月前
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
10月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
285 16
|
11月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
344 19
|
10月前
|
存储 运维 监控
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
416 1

推荐镜像

更多