iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySql存储过程循环使用的方法
  • 673
分享到

MySql存储过程循环使用的方法

2023-07-02 13:07:35 673人浏览 独家记忆
摘要

今天小编给大家分享一下MySql存储过程循环使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。场景描述我们举一个简单的

今天小编给大家分享一下MySql存储过程循环使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

场景描述

我们举一个简单的场景,首先我们可能会有这样一种情况,考试成绩表(t_achievement)有一堆的sql脚本处理,需要依赖另一个学生表(t_student)数据对部分学生做考试成绩汇总记录到成绩汇总表(t_achievement_report)。

解决方案

  • 有一种方式就是通过代码优先将要汇总的学生表数据获取出来,然后按成绩汇总流程逐个将学生信息数据传递到成绩汇总业务代码进行处理。

  • 另一种方式也是我们今天的主题,那就是通过存储过程的方式去做。

案例

建表语句:

-- 学生信息表DROP TABLE IF EXISTS t_student;CREATE TABLE `t_student` (  `id` BIGINT(12) NOT NULL AUTO_INCREMENT COMMENT '主键',  `code` VARCHAR(10) NOT NULL COMMENT '学号',  `name` VARCHAR(20) NOT NULL COMMENT '姓名',  `age` INT(2) NOT NULL COMMENT '年龄',  `gender` CHAR(1) NOT NULL COMMENT '性别(M:男,F:女)',  PRIMARY KEY (`id`),  UNIQUE KEY UK_STUDENT (`code`)) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 学生成绩表DROP TABLE IF EXISTS t_achievement;CREATE TABLE `t_achievement` (  `id` BIGINT(12) NOT NULL AUTO_INCREMENT COMMENT '主键',  `year` INT(4) NOT NULL COMMENT '学年',  `subject` CHAR(2) NOT NULL COMMENT '科目(01:语文,02:数学,03:英语)',  `score` INT(3) NOT NULL COMMENT '得分',  `student_id` BIGINT(12) NOT NULL COMMENT '所属学生id',  PRIMARY KEY (`id`) ) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 成绩汇总表DROP TABLE IF EXISTS t_achievement_report;CREATE TABLE `t_achievement_report` (  `id` BIGINT(12) NOT NULL AUTO_INCREMENT COMMENT '主键',  `student_id` BIGINT(12) NOT NULL COMMENT '学生id',  `year` INT(4) NOT NULL COMMENT '学年',  `total_score` INT(4) NOT NULL COMMENT '总分',  `avg_score` DECIMAL(4,2) NOT NULL COMMENT '平均分',  PRIMARY KEY (`id`) ) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

初始化数据:

INSERT INTO t_student(id, CODE, NAME, age, gender) VALUES(1, '2022010101', '小张', 18, 'M'),(2, '2022010102', '小李', 18, 'F'),(3, '2022010103', '小明', 18, 'M');INSERT INTO t_achievement(YEAR, SUBJECT, score, student_id) VALUES(2022, '01', 80, 1),(2022, '02', 85, 1),(2022, '03', 90, 1),(2022, '01', 60, 2),(2022, '02', 90, 2),(2022, '03', 98, 2),(2022, '01', 75, 3),(2022, '02', 100, 3),(2022, '03', 85, 3);

MySql存储过程循环使用的方法

MySql存储过程循环使用的方法

存储过程:

在这里主要以上面的场景为例,使用存储过程循环去处理数据。写一个存储过程,将以上数据每个学生的成绩进行汇总。

-- 如果存储过程存在,先删除存储过程DROP PROCEDURE IF EXISTS statistics_achievement;DELIMITER $$-- 定义存储过程CREATE PROCEDURE statistics_achievement()BEGIN        -- 定义变量记录循环处理是否完成DECLARE done BOOLEAN DEFAULT FALSE;        -- 定义变量传递学生idDECLARE studentid BIGINT(12);-- 定义游标DECLARE cursor_student CURSOR FOR SELECT id FROM t_student;-- 定义CONTINUE HANDLER,当循环结束时 done=trueDECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=TRUE;-- 打开游标OPEN cursor_student;-- 重复遍历REPEAT -- 每次读取一次游标FETCH cursor_student INTO studentid;                -- 计算总分、平均分插入汇总表INSERT INTO t_achievement_report(student_id, `YEAR`, total_score, avg_score)SELECT studentid, `YEAR`, SUM(score), ROUND(SUM(score) / 3, 2) FROM t_achievement t1 WHERE student_id = studentid AND NOT EXISTS(SELECT 1 FROM t_achievement_report t2 WHERE student_id = studentid AND t1.year = t2.year) GROUP BY `YEAR`;-- 结束循环,意思是等到done=true时,结束循环REPEATUNTIL done END REPEAT;-- 查询结果,仅会展示查出的最后一条SELECT studentid;-- 关闭游标CLOSE cursor_student;END$$DELIMITER ;
-- 执行存储过程CALL statistics_achievement();
  • 执行结果,返回查询结果3,即最后一条学生记录id

MySql存储过程循环使用的方法

MySql存储过程循环使用的方法

以上就是“Mysql存储过程循环使用的方法”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySql存储过程循环使用的方法

本文链接: https://www.lsjlt.com/news/342272.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySql存储过程循环使用的方法
    今天小编给大家分享一下MySql存储过程循环使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。场景描述我们举一个简单的...
    99+
    2023-07-02
  • MySQL存储过程中的循环控制方法是什 么
    MySQL存储过程中的循环控制方法主要有以下几种: WHILE循环:使用WHILE语句来实现循环控制,当指定的条件为真时,循环体会...
    99+
    2024-04-30
    MySQL
  • MySQL REPEAT循环语句如何在存储过程中使用?
    众所周知,MySQL 为我们提供了循环语句,允许我们根据条件重复执行 SQL 代码块。 REPEAT循环语句就是此类循环语句之一。其语法如下 -REPEAT statements; UNTIL expression END REPEA...
    99+
    2023-10-22
  • mysql数据库存储过程之while循环
    一、语法。 while循环是有条件的循环控制语句,满足条件后,再执行循环体中的SQL语句,具体语法为: #先判定条件,如果条件为TRUE,则执行逻辑,否则不执行逻辑while 条件 do SQL逻辑 end while; 二、案例。 计...
    99+
    2023-09-21
    数据库 sql
  • mysql存储过程中的循环语句怎么写
    今天小编给大家分享一下mysql存储过程中的循环语句怎么写的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
  • mysql储存过程中循环语句有哪些
    mysql存储过程中提供while和repeat两种循环语句:while循环:根据条件重复执行代码块,条件为真时继续执行。repeat循环:先执行代码块,再检查条件是否为真,为假则再次执...
    99+
    2024-04-22
    mysql 代码可读性
  • MySQL存储过程如何插入循环数据
    要在MySQL存储过程中插入循环数据,可以使用循环结构来遍历数据并插入到表中。以下是一个简单的示例: DELIMITER // C...
    99+
    2024-04-30
    MySQL
  • MySQL存储过程怎么循环插入数据
    这篇文章主要讲解了“MySQL存储过程怎么循环插入数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL存储过程怎么循环插入数据”吧!测试机器时经常要...
    99+
    2024-04-02
  • MySQL存储过程中怎么控制循环次数
    在MySQL存储过程中,可以使用循环控制结构来控制循环次数,其中常用的循环结构有WHILE循环和FOR循环。 WHILE循环:在M...
    99+
    2024-04-30
    MySQL
  • 如何在mysql存储过程中使用WHILE,REPEAT和LOOP循环语句
    这篇文章将为大家详细讲解有关如何在mysql存储过程中使用WHILE,REPEAT和LOOP循环语句,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL...
    99+
    2024-04-02
  • MySQL存储过程时循环控制的技巧是什么
    在MySQL存储过程中实现循环控制的技巧有两种方法,一种是使用WHILE循环,另一种是使用LOOP循环。下面分别介绍这两种方法: ...
    99+
    2024-04-30
    MySQL
  • mysql调试存储过程的方法
    小编给大家分享一下mysql调试存储过程的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql调试存储过程的方法:首先用一张临时表,记录调试过程;然后直接在存储过程中,增加【selec...
    99+
    2024-04-02
  • mysql调用存储过程的方法是什么
    mysql调用存储过程的方法是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧! MySQL调用存储过程必须要使...
    99+
    2024-04-02
  • mysql存储过程参数的用法
    这篇文章主要讲解了“mysql存储过程参数的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql存储过程参数的用法”吧!说明in输入参数:表示调用者向存储过程的输入值(输入值可以是字...
    99+
    2023-06-20
  • MySQL 存储过程的基本用法
    MySQL 存储过程是一组预定义的 SQL 语句集合,它们可以被调用并执行。存储过程可以接受参数并返回结果,可以在数据库中存储和重复...
    99+
    2023-09-12
    MySQL
  • 分享SqlServer存储过程使用方法
    目录一、简介二、使用三、在存储过程中实现分页一、简介 简单记录一下存储过程的使用。存储过程是预编译SQL语句集合,也可以包含一些逻辑语句,而且当第一次调用存储过程时,被调用的存储过程...
    99+
    2024-04-02
  • 使用MySQL存储过程的优点
    本篇内容主要讲解“使用MySQL存储过程的优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用MySQL存储过程的优点”吧! 1. 使用存储过程的优...
    99+
    2024-04-02
  • 存储过程循环对MySQL事务处理有哪些影响
    存储过程循环对MySQL事务处理可能会产生一些影响,包括: 循环中的每一次迭代都会被视为一个独立的事务。如果在循环中发生错误,可能...
    99+
    2024-04-30
    MySQL
  • MySQL创建存储过程并循环添加记录的案例分析
    这篇文章将为大家详细讲解有关MySQL创建存储过程并循环添加记录的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先创建,然后调用:-- 创建存储过程 DELIMI...
    99+
    2024-04-02
  • MySQL中怎么使用存储过程
    MySQL中怎么使用存储过程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 mysql存储过程存储过程(Stored  P...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作