【MySQL数据库】存储过程实战——图书借阅系统

图书借阅归还 借阅不用count判断,归还不用具体字段值判断 每次借阅或者归还只能操作1本

数据准备

-- 创建数据库
create database db_test3 CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 使用数据库
use db_test3;
-- 创建图书信息表:
create table books(
book_id int primary key auto_increment,
book_name varchar(50) not null,
book_author varchar(20) not null,
book_price decimal(10,2) not null,
book_stock int not null,
book_desc varchar(200)
);
-- 添加图书信息
insert into
books(book_name,book_author,book_price,book_stock,book_desc)
values('高级运维工程师','运老师',38.80,12,'运老师带你运维起飞');
insert into
books(book_name,book_author,book_price,book_stock,book_desc)
values('简易mysql','维老师',44.40,9,'维老师带你学mysql');
-- 创建学⽣信息表
create table students(
stu_num char(4) primary key,
stu_name varchar(20) not null,
stu_gender char(2) not null,
stu_age int not null
);
-- 添加学⽣信息
insert into students(stu_num,stu_name,stu_gender,stu_age)
values('1001','张三','男',20);
insert into students(stu_num,stu_name,stu_gender,stu_age)
values('1002','李四','⼥',20);
insert into students(stu_num,stu_name,stu_gender,stu_age)
values('1003','王五','男',20);

创建借书记录表

-- 借书记录表:
create table records(
rid int primary key auto_increment, -- 借阅信息id
snum char(4) not null,-- 学号
bid int not null, -- 书籍id
borrow_num int not null, -- 借阅数量
is_return int not null, -- 归还状态:0 表示未归还 1 表示已经归还
borrow_date date not null,-- 借阅日期
return_date date,-- 归还日期
constraint FK_RECORDS_STUDENTS foreign key(snum) references
students(stu_num),
constraint FK_RECORDS_BOOKS foreign key(bid) REFERENCES
books(book_id)
);

创建存储过程实现借书业务

-- 实现借书业务:
-- 参数1: a 输入参数 学号
-- 参数2: b 输入参数 图书编号
-- 参数3: state 输出参数 借书的状态(1 借书成功,2 学号不存在,3 图书不存在, 4 库存不⾜)
create procedure proc_borrow_book(IN a char(4),IN b int,OUT state int)
BEGINDECLAREstu_exist INT DEFAULT 0;DECLAREbook_exist INT DEFAULT 0;DECLAREstock INT DEFAULT 0;-- 判断学号是否存在:根据参数 a 到学⽣信息表查询是否有stu_num=a的记录SELECTstu_num INTO stu_exist FROMstudents WHEREstu_num = a;IFstu_exist > 0 THEN
-- 学号存在
-- 判断图书ID是否存在:根据参数b 查询图书记录总数SELECTbook_id INTO book_exist FROMbooks WHEREbook_id = b;IF book_exist > 0 THEN
-- 图书存在
-- 判断图书库存是否充足:查询当前图书库存,然后和参数m进行比较select book_stock INTO stock from books where book_id=b;if stock >= 1 then
-- 执行借书
-- 操作1:在借书记录表中添加记录insert into records(snum,bid,borrow_num,is_return,borrow_date) values(a,b,1,0,sysdate());
-- 操作2:修改图书库存update books set book_stock=stock-1 where book_id=b;
-- 借书成功SET state = 1;ELSE -- 库存不足SET state = 4;END IF;ELSE -- 图书不存在SET state = 3;END IF;ELSE -- 学号不存在SET state = 2;END IF;
END;-- 调用存储过程借书SET @state = 0;
CALL proc_borrow_book ( '1001', 1, @state );
SELECT@state;

在这里插入图片描述
在这里插入图片描述

创建存储过程实现还书业务

-- 实现借书业务:
-- 参数1: a 输入参数 学号
-- 参数2: b 输入参数 图书编号
-- 参数3: dt 输入参数 借阅日期
-- 参数4: state 输出参数 归还的状态(1 归还成功 2 归还失败)
CREATE PROCEDURE proc_return_book ( IN a CHAR ( 4 ), IN b INT, IN dt DATE, OUT state INT ) BEGINDECLARErecord_count INT DEFAULT 0;-- 记录借阅记录idDECLARErecord_id INT DEFAULT 0;-- 记录借阅记录id
-- 查询借阅记录id,如果借阅记录存在record_id的值会变为对应id,否则为0SELECTrid INTO record_id FROMrecords WHEREsnum = a AND bid = b AND is_return = 0 AND borrow_date = dt;-- 查询借阅记录id,如果借阅记录存在record_id的值会变为对应id,否则为0SELECTcount( rid ) INTO record_count FROMrecords WHEREsnum = a AND bid = b AND is_return = 0 AND borrow_date = dt;IFrecord_count <> 0 THEN-- 修改书籍数量为添加借阅数量后的数量UPDATE books SET book_stock = book_stock + 1 WHEREbook_id = b;-- 修改借阅记录中的借阅状态为归还UPDATE records SET is_return = 1 WHERErid = record_id;-- 设置返回值为1,归还成功SET state = 1;ELSE -- 设置返回值为2,归还失败SET state = 2;END IF;END;SET @state = 0;
CALL proc_return_book ( '1001', 1, '2024-05-28', @state );
SELECT@state;

在这里插入图片描述

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

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

相关文章

鸿蒙高级题库

判断题 1、云函数打包完成后&#xff0c;需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用 &#xff08;错&#xff09; 2、在column和Row容器组件中&#xff0c;aligntems用于设置子组件在主轴方向上的对齐格式&#xff0c;justifycontent用于设置子组件在交…

帆软生成csv文件

帆软官网提供了导出csv文件的插件&#xff0c;需要下载指定版本的插件 请选择具体的详情点击官网介绍&#xff1a;文档介绍 插件地址&#xff1a;插件地址

免费分享一套SpringBoot+Vue企业客户关系CRM管理系统【论文+源码+SQL脚本+PPT】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue企业客户关系CRM管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue企业客户关系CRM管理系统系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue企业客户关系CRM管…

表空间[MAIN]处于脱机状态

达梦数据库还原后&#xff0c;访问数据库报错&#xff1a;表空间[MAIN]处于脱机状态 解决方法&#xff1a; 1&#xff1a;检查备份文件 DMRMAN 中使用 CHECK 命令对备份集进行校验&#xff0c;校验备份集是否存在及合法。 ##语法&#xff1a;CHECK BACKUPSET <备份集目录…

Linux IO模型深度解析与实战应用

linux的5种IO模型 一、这里IO是什么 操作系统设有用户态与内核态,确保系统安全。应用程序默认在用户态运行,而执行如IO操作等底层任务时,需切换至内核态以高效执行。 服务器从网络接收的大致流程如下: 1、数据通过计算机网络来到了网卡 2、把网卡的数据读取到 socket 缓…

【CSS】input宽度根据内容自适应

目标&#xff1a;纯css实现以下功能 input 设置width:min-content | max-content&#xff1b;//无效 ∵ 文本输入框通常会被浏览器渲染为具有固定宽度的控件。 解决方法&#xff1a;设置input的宽高都为100%&#xff0c;让它随着父元素的宽高改变。 父元素如何改变呢&#xf…

企企通入选第一新声《2024年中国CIO数字化产品选型白皮书》供应链数字产品可信名录

近日&#xff0c;第一新声研究院根据多年产业数字化研究&#xff0c;历经近半年时间&#xff0c;并综合近200位CIO调研与推荐意见&#xff0c;发布《2024年中国CIO数字化产品选型白皮书》&#xff0c;并推出企业CIO选型指南及可信产品名录。企企通凭借其优秀的采购数字化与供应…

让全世界都能使用你的代码:Python 模块上传 PyPI 全攻略(一步步带你发布自己的 Python 模块到 PyPI)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PyPI 发布教程 📒📝 什么是 PyPI📝 模块的结构和必备文件📝 打包你的模块📝 上传到 PyPI📝 配置 PyPI 账号📝 解决常见问题⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾经想过,自己写的 Python 模块也能发布到 Py…

【乐吾乐3D可视化组态编辑器】模型类型与属性

编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 本章主要为您介绍模型的属性功能。 一个模型至少会包含一个节点&#xff08;Node&#xff09;&#xff0c;从节点类型上可以分为转换节点&#xff08;TransformNode&#xff09;、网格&#xff08;Mesh&#xff09;、实例网…

【脑洞大开】Typora Plugin给你的Typora插上翅膀

很厉害的插件&#xff0c;好几个都是我想有但是没有支持的插件&#xff0c;比如标签页&#xff0c;全局关键字高亮 目前支持的功能&#xff1a; 序号插件功能1window_tab标签页管理2search_multi全局多关键字搜索3multi_highlighter多关键字高亮4collapse_paragraph章节折叠5c…

Linux定期清理nginx 日志

为了在Linux系统上定期清理Nginx日志&#xff0c;可以使用cron定时任务来自动执行日志清理脚本。以下是详细步骤&#xff1a; 1. 创建日志清理脚本 首先&#xff0c;创建一个脚本&#xff0c;用于归档和清理旧的Nginx日志。例如&#xff0c;将其命名为 /usr/local/bin/clean…

正确解决java.lang.NoSuchMethodException异常的有效解决方法

正确解决java.lang.NoSuchMethodException异常的有效解决方法 文章目录 报错问题报错原因解决方法 报错问题 java.lang.NoSuchMethodException异常 报错原因 java.lang.NoSuchMethodException 异常在 Java 中表示尝试通过反射&#xff08;java.lang.reflect 包&#xff09;调用…

【Sql Server】随机查询一条表记录,并重重温回顾下存储过程的封装和使用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言随机查询语…

小程序大能量:盲盒平台搭建与营销策略

一、引言 在移动互联网的浪潮下&#xff0c;小程序以其轻量级、即用即走的特点&#xff0c;成为了商家与消费者沟通的新桥梁。盲盒经济作为近年来兴起的消费趋势&#xff0c;结合小程序平台&#xff0c;不仅为用户带来了全新的购物体验&#xff0c;也为商家带来了更多的商业机…

k8s安装metrics组件

安装完dashboard之后&#xff0c;可以看到k8s所有组件&#xff0c;但各组件cpu内存使用量没有值&#xff0c;还需要安装metrics组件才行,安装完metric就可以看到各node以及pod的cpu/mem实时使用量了 下面是如何安装metrics 下载Metrics Server 配置文件 wget https://github.c…

leetCode.84. 柱状图中最大的矩形

leetCode.84. 柱状图中最大的矩形 题目思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形的第一个小于左边界的矩形 - 用单调栈for ( …

颠仆流离学二叉树1 (Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

数码论坛|基于SprinBoot+vue的数码论坛系统(源码+数据库+文档)

数码论坛系统 目录 基于SprinBootvue的数码论坛系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2 管理员功能模块 3 用户后台管理模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&am…

盲人心理辅导课程:心灵的引路人

在这个快节奏的社会中&#xff0c;技术的每一次跃进都在悄然改变着人们的生活方式&#xff0c;尤其对于盲人群体&#xff0c;一款名为“蝙蝠避障”的辅助软件成为了他们探索世界的得力助手。通过实时避障与拍照识别功能&#xff0c;“蝙蝠避障”不仅保障了盲人朋友的日常安全&a…

学习java第八十三天

Spring中Bean的作用域&#xff1f; 1.singleton&#xff08;单例&#xff09;&#xff08;默认的&#xff09;&#xff1a;在整个应用中只创建一个Bean实例&#xff0c;并在容器启动时就创建&#xff0c;以后每次请求都返回同一个实例。 2.prototype&#xff08;原型&#xf…