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

MySQL 带游标的存储过程(实验报告)

一、实验名称: 带游标的存储过程 

二、实验日期: 2024 年  5月 25 日

三、实验目的:

  • 掌握MySQL带游标的存储过程的创建及调用;

四、实验用的仪器和材料:

硬件:PC电脑一台;

配置:内存,2G及以上  硬盘250G及以上

软件环境:操作系统 windows7以上

数据库环境:MySQL5.7或MySQL8.0.20

五、实验步骤和方法

练习:(所有建表及插入数据语句参考附件,如下:)

# 实验前提:创建表并插入数据.记得跟MySQL交代好用哪个数据库CREATE TABLE `bookinfo` (`Bookid` varchar(30) NOT NULL,`ISBN` varchar(50) DEFAULT NULL,`Bookname` varchar(50) DEFAULT NULL,`Author` varchar(30) DEFAULT NULL,`Publisher` varchar(30) DEFAULT NULL,`Price` double DEFAULT NULL,`Booktype` varchar(20) DEFAULT NULL,`Orderdate` datetime DEFAULT NULL,`Bookstatus` varchar(50) DEFAULT NULL,PRIMARY KEY (`Bookid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `bookinfo` VALUES ('19-03-01-012024-8-1', '978-7-115-25547-1', '数据库系统原理及应用', '袁丽娜', '人民邮电出版社', '49', '专业基础', '2015-08-06 15:52:32', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-01-012024-8-2', '978-7-302-54924-6', '网站设计与WEB应用开发技术', '张锦祥', '清华大学出版社', '76', '编程语言', '2020-04-10 15:55:13', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-01-012024-8-7', '978-7-1116-5397-4', '数据库系统原理及应用', '胡孔法', '机械工业出版社', '45', '专业基础', '2020-06-16 16:16:13', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-08-012024-8-5', '978-7-115-37950-4', '数据结构', '严蔚敏', '人民邮电出版社', '35', '编程语言', '2016-08-16 15:58:46', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-08-012024-8-6', '978-7-121-24492-6', '数据仓库与数据挖掘实践', '李春葆', '电子工业出版社', '48', '实践类', '2014-11-06 15:56:54', '借出');CREATE TABLE `booklended` (`Bookid` varchar(30) NOT NULL,`Readerid` char(10) NOT NULL,`Lendtime` datetime NOT NULL,`Backtime` datetime DEFAULT NULL,PRIMARY KEY (`Bookid`,`Readerid`,`Lendtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `booklended` VALUES ('19-03-01-012024-8-1', '1000002113', '2019-12-08 16:07:23', null);
INSERT INTO `booklended` VALUES ('19-03-01-012024-8-2', '1000001112', '2020-09-11 18:29:06', '2020-12-02 18:29:17');
INSERT INTO `booklended` VALUES ('19-03-08-012024-8-5', '1000001111', '2020-09-08 16:37:02', null);
INSERT INTO `booklended` VALUES ('19-03-08-012024-8-6', '1000001114', '2020-01-01 16:07:23', '2020-02-06 20:02:45');CREATE TABLE `reader` (`Readerid` char(10) NOT NULL,`Readername` varchar(15) DEFAULT NULL,`Tel` varchar(11) DEFAULT NULL,`Sf` varchar(4) DEFAULT NULL,`Sno` varchar(10) DEFAULT NULL,`Num` int DEFAULT NULL,`Sex` char(2) DEFAULT NULL,`Birth` datetime DEFAULT NULL,`Dept` varchar(50) DEFAULT NULL,`bz` varchar(20) DEFAULT NULL,PRIMARY KEY (`Readerid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `reader` VALUES ('1000001111', '李庆', '13785696235', '学生', '1904112234', '2', '男', '2001-06-16 00:00:00', '网络系', null);
INSERT INTO `reader` VALUES ('1000001112', '陈晨', '13825263695', '学生', '1804123695', '3', '男', '2000-07-21 16:02:31', '软件工程系', null);
INSERT INTO `reader` VALUES ('1000001114', '刘柳', '13623659465', '学生', '1704133695', '1', '女', '1999-12-16 16:05:05', '数码系', null);
INSERT INTO `reader` VALUES ('1000002113', '王建', '13925063698', '教师', null, '5', '男', '1983-03-10 16:03:33', '软件工程系', null);

1、创建一个带游标的存储过程p_find,不带参数,查询出“人民邮电出版社”出版书籍数据库相关的所有信息(包括借阅书籍编号,借阅书籍名称,读者编号,读者姓名,书籍借出时间,书籍归还时间,当前日期和时间),并且将查询出的所有数据插入到读者借阅备份表brl_bak中。brl_bak表建表语句如下,写出该存储过程及调用此存储过程的代码,并查询表brl_bak中的数据进行验证。  

  CREATE TABLE brl_bak(Bookid varchar(30),Bookname varchar(50),readerid varchar(10),readname varchar(15),ltime datetime,btime datetime,crsj datetime) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、创建一个带游标的存储过程p_cfind,带参数,实现根据传入参数(读者所在部门)查询出“软件工程系”的学生和老师借阅的所有信息(包括借阅书籍编号,借阅书籍名称,读者编号,读者姓名,书籍借出时间,书籍归还时间,当前日期和时间),并且将查询出的所有数据插入到读者借阅备份表brl_bak1中。brl_bak1表建表语句如下,写出该存储过程及调用此存储过程的代码,并查询表brl_bak中的数据进行验证。   

 CREATE TABLE brl_bak1(Bookid varchar(30),Bookname varchar(50),readerid varchar(10),readname varchar(15),ltime datetime,btime datetime,crsj datetime) ENGINE=InnoDB DEFAULT CHARSET=utf8;

六、实验结果或结论:即根据实验过程中所见到的现象和测得的数据,作出结论。

根据实验要求创建一个带游标的存储过程p_find:

DELIMITER //CREATE PROCEDURE p_find()
BEGINDECLARE done INT DEFAULT 0;DECLARE book_id varchar(30);DECLARE book_name varchar(50);DECLARE reader_id char(10);DECLARE reader_name varchar(15);DECLARE borrow_time datetime;DECLARE return_time datetime;DECLARE current_datetime datetime;DECLARE cur CURSOR FORSELECT bi.Bookid, bi.Bookname, bl.Readerid, r.Readername, bl.Lendtime, bl.BacktimeFROM bookinfo bi   -- 为了方便给这三个表都起了别名JOIN booklended bl ON bi.Bookid = bl.BookidJOIN reader r ON bl.Readerid = r.ReaderidWHERE bi.Publisher = '人民邮电出版社';DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;OPEN cur;read_loop: LOOPFETCH cur INTO book_id, book_name, reader_id, reader_name, borrow_time, return_time;IF done THENLEAVE read_loop;END IF;SET current_datetime = NOW();INSERT INTO brl_bak(Bookid, Bookname, readerid, readname, ltime, btime, crsj)VALUES (book_id, book_name, reader_id, reader_name, borrow_time, return_time, current_datetime);END LOOP;CLOSE cur;
END//DELIMITER ;

查询读者借阅备份表brl_bak:

根据实验要求创建一个带游标的存储过程p_cfind

DELIMITER //CREATE PROCEDURE p_cfind(IN dept_name VARCHAR(50))
BEGINDECLARE done INT DEFAULT 0;DECLARE book_id varchar(30);DECLARE book_name varchar(50);DECLARE reader_id varchar(10);DECLARE reader_name varchar(15);DECLARE borrow_time datetime;DECLARE return_time datetime;DECLARE current_datetime datetime;DECLARE cur CURSOR FORSELECT bi.Bookid, bi.Bookname, bl.Readerid, r.Readername, bl.Lendtime, bl.BacktimeFROM bookinfo biJOIN booklended bl ON bi.Bookid = bl.BookidJOIN reader r ON bl.Readerid = r.ReaderidWHERE r.Dept = dept_name;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;OPEN cur;read_loop: LOOPFETCH cur INTO book_id, book_name, reader_id, reader_name, borrow_time, return_time;IF done THENLEAVE read_loop;END IF;SET current_datetime = NOW();INSERT INTO brl_bak1(Bookid, Bookname, readerid, readname, ltime, btime, crsj)VALUES (book_id, book_name, reader_id, reader_name, borrow_time, return_time, current_datetime);END LOOP;CLOSE cur;
END//DELIMITER ;

查询读者借阅备份表brl_bak1:

实验心得可写上实验成功或失败的原因,实验后的心得体会、建议等。

    带游标的存储过程在实践中通常用于处理需要逐行操作结果集的情况。游标允许逐行检索查询结果,并对每一行进行处理,这在某些复杂的数据处理场景中非常有用。在以后实践过程中使用带游标的存储过程时需要注意的事项,首先是性能影响,使用游标会增加数据库服务器的负载,尤其是在处理大量数据时。游标需要占用额外的内存和处理时间,因此在设计存储过程时要考虑性能方面的影响。第二个需要注意的点是数据一致性,在使用游标时,需要确保正确处理每一行数据,以避免数据不一致或错误的结果。正确地打开、关闭和释放游标是确保数据一致性的重要步骤。最后便是资源管理——游标使用数据库连接和内存资源,因此在使用游标时要注意资源的管理和释放,避免资源泄漏或性能下降。

    结合上面的实验,使用带游标的存储过程p_cfind可以逐行查询“软件工程系”学生和老师借阅的所有信息,并将数据插入到读者借阅备份表brl_bak1中。这种做法的好处之一便是精细控制:使用游标可以实现对每一行数据的精细控制和处理,适用于需要逐行处理的复杂业务逻辑。同时也增加了灵活性,游标允许在存储过程中对结果集进行动态操作,可以根据需要对数据进行个性化处理。另外起到了数据备份的作用:将查询结果插入到备份表中可以实现数据备份和保留历史记录,有助于数据管理和数据分析。

    带游标的存储过程在处理需要逐行操作数据的场景中非常有用,但在设计和实现时需要注意性能、数据一致性和资源管理等方面的问题,以确保存储过程的效率和稳定性。

相关文章:

MySQL 带游标的存储过程(实验报告)

一、实验名称: 带游标的存储过程 二、实验日期: 2024 年 5月 25 日 三、实验目的: 掌握MySQL带游标的存储过程的创建及调用; 四、实验用的仪器和材料: 硬件:PC电脑一台; 配置&#xff1…...

结构体(位段)内存分配

结构体由多个数据类型的成员组成。那编译器分配的内存是不是所有成员的字节数总和呢? 首先,stu的内存大小并不为29个字节,即证明结构体内存不是所有成员的字节数和。   其次,stu成员中sex的内存位置不在21,即可推测…...

基于SSH的母婴用品销售管理系统带万字文档

文章目录 母婴商城系统一、项目演示二、项目介绍三、系统部分功能截图四、万字论文参考五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 母婴商城系统 一、项目演示 母婴商城系统 二、项目介绍 基于SSH的母婴商城系统 系统…...

说些什么好呢

大一:提前学C和C。学完语法去洛谷或者Acwing二选一,刷300道左右题目。主要培养编程思维,让自己的逻辑能够通过代码实现出来。 现在对算法有点感兴趣但是没有天赋,打不了acm,为就业做准备咯。 大二(算法竞赛)&#xff1…...

1301-习题1-1高等数学

1. 求下列函数的自然定义域 自然定义域就是使函数有意义的定义域。 常见自然定义域: 开根号 x \sqrt x x ​: x ≥ 0 x \ge 0 x≥0自变量为分式的分母 1 x \frac{1}{x} x1​: x ≠ 0 x \ne 0 x0三角函数 tan ⁡ x cot ⁡ x \tan x \cot x …...

C语言之指针进阶(3),函数指针

目录 前言: 一、函数指针变量的概念 二、函数指针变量的创建 三、函数指针变量的使用 四、两段特殊代码的理解 五、typedef 六、函数指针数组 总结: 前言: 本文主要讲述C语言指针中的函数指针,包括函数指针变量的概念、创建…...

RabbitMQ安装及配套Laravel使用

MQ MQ 全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。 为什么需要mq: 解耦:MQ能够使各个系统或组件之间解耦,降低它们之间的耦合度,提高系统的灵活性和可维护性异步处理:通过MQ可以实现异步处理,提高系统响应速度和吞…...

java在类的定义中创建自己的对象?

当在main方法中新建自身所在类的对象,并调用main方法时,会不断循环调用main方法,直到栈溢出 package com.keywordStudy;public class mainTest {static int value 33;public static void main(String[] args) throws Exception{String[] sn…...

掌握C++回调:按值捕获、按引用捕获与弱引用

文章目录 一、按引用捕获和按值捕获1.1 原理1.2 案例 二、弱引用2.1 原理2.2 案例一2.3 案例二:使用base库的弱引用 三、总结 在C回调中,当使用Lambda表达式捕获外部变量时,有两种捕获方式:按值捕获和按引用捕获。 一、按引用捕获…...

抖音运营_如何做出优质的短视频

目录 一 短视频内容的构成 1 图像 2 字幕 3 声音 4 特效 5 描述 6 评论 二 短视频的热门类型 1 颜值圈粉类 2 知识教学类 3 幽默搞笑类 4 商品展示类 5 才艺技能类 6 评论解说类 三 热门短视频的特征 1 产生共鸣 2 正能量 3 紧跟热点话题 4 富有创意 四 短视…...

Day21:Leetcode513.找树左下角的值 +112. 路径总和 113.路径总和ii + 106.从中序与后序遍历序列构造二叉树

LeetCode:513.找树左下角的值 解决方案: 1.思路 在遍历一个节点时,需要先把它的非空右子节点放入队列,然后再把它的非空左子节点放入队列,这样才能保证从右到左遍历每一层的节点。广度优先搜索所遍历的最后一个节点…...

Java数据结构和算法(B树)

前言 B树又叫平衡的多路搜索树;平衡的意思是又满足平衡二叉树的一些性质,左树大于右树; 多路意思是,可以多个结点,不再是像二叉树只有两个结点; 实现原理 B树是一种自平衡的搜索树,通常用于实…...

成为程序员后我都明白了什么?从入行到弃坑?

作为一个入行近10年的php程序员,真心感觉一切都才刚开始,对计算机,编程语言的理解也好,程序员中年危机也罢,之前都是听别人说的,真的自己到了这个水平,这个年龄才深刻体会到这其中的种种。 我一…...

python --创建固定字符串长度,先进先出

a 123def concatenate_within_limit(b, new_string):# 计算新字符串与a的长度之和a btotal_length len(a) len(new_string)# 如果长度超过1024,从前面删除足够的字符if total_length > 5:diff total_length - 5a a[diff:] new_string # 删除前diff个字符…...

容器化部署

目录 docker容器化部署 怎样使用Docker Compose或Kubernetes等容器编排工具来管理和扩展联邦学习系统 使用Docker Compose...

国产数据库TiDB的常用方法

TiDB的常用方法主要涉及安装配置、数据操作、性能调优以及监控和维护等方面。以下是对这些常用方法的归纳和介绍: 1. 安装与配置 安装TiDB:根据官方文档的指引,用户可以按照步骤进行TiDB的安装。配置TiDB:安装完成后&#xff0c…...

基于DdddOcr通用验证码离线本地识别SDK搭建个人云打码接口Api

前言 最近介绍了一款免费的验证码识别网站,识别效率太低,考虑到ddddocr是开源的,决定搭建搭建一个,发现原作者sml2h3已经推出好久了,但是网上没有宝塔安装的教程,于是本次通过宝塔搭建属于自己的带带弟弟OCR通用验证码离线本地识别 原项目地址:https://github.com/sml2…...

2、xss-labs之level2

1、打开页面 2、传入xss代码 payload&#xff1a;<script>alert(xss)</script>&#xff0c;发现返回<script>alert(xss)</script> 3、分析原因 打开f12&#xff0c;没什么发现 看后端源码&#xff0c;在这form表单通过get获取keyword的值赋给$str&am…...

人才测评的应用:人才选拔,岗位晋升,面试招聘测评

人才测评自诞生以来&#xff0c;就被广泛应用在各大方面&#xff0c;不仅是我们熟悉的招聘上&#xff0c;还有其他考核和晋升&#xff0c;都会需要用到人才测评。不知道怎么招聘&#xff1f;或者不懂得如何实现人才晋升&#xff1f;都可以参考人才测评&#xff0c;利用它帮我们…...

前端面试题日常练-day33 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末。 在jQuery中&#xff0c;以下哪个选项用于在元素上绑定一个点击事件&#xff1f; a) click() b) bind() c) on() d) trigger() jQuery中&#xff0c;以下哪个选项用于获取元素的属性值&#xff1f; …...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...