【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程

news2024/11/18 20:39:41

目录

  • 1. 简述
  • 2. 数据表 增、删、改 测试
    • 2.1 借阅人表
    • 2.2 图书表
    • 2.3 借阅信息表
  • 3. 功能代码
    • 3.1 创建视图显示所有逾期未归还的借阅信息(包括借阅人姓名,借阅人类别,书名,借出日期,应归还日期,逾期时长);
    • 3.2 创建存储过程,每借出一本图书,向借阅信息表中加入一条记录;
    • 3.3 创建存储过程,每归还一本图书,修改借阅信息表中相应的记录;

1. 简述

这篇文章将主要完成图书借阅系统的 1~3 题(视图 以及 存储过程),即

  1. 创建视图显示所有逾期未归还的借阅信息(包括借阅人姓名,借阅人类别,书名,借出日期,应归还日期,逾期时长);
  2. 创建存储过程,每借出一本图书,向借阅信息表中加入一条记录;
  3. 创建存储过程,每归还一本图书,修改借阅信息表中相应的记录;

2. 数据表 增、删、改 测试

:数据表的 功能会在增删改中出现,因此不重复测试~

这部分读者请勿自行测试,如若想跟着我一起测试的话,请测试完毕后删除此数据库 library,并根据第一篇文章重新创建数据库 library。因为自行修改数据后,可能会出现异常情况(比如现在没有创建触发器,有些数据可能只在一张表中删除了,而在其他关联表中未删除!!!)

我们在 Navicat命令列界面 进行测试,方便查看过往数据:

在这里插入图片描述

2.1 借阅人表

下面对借阅人表(borrower)进行增删改查操作,查看是否可以正常执行。

  1. select * from borrower;
    INSERT INTO borrower VALUES(1000000000003,'李丽梅','女','教师',DEFAULT,DEFAULT,13125121059,'llm@whu.edu.cn',5,'123456');
    INSERT INTO borrower VALUES(1000000000003,'李丽梅','女','教师',DEFAULT,DEFAULT,13125121059,'llm@whu.edu.cn',5,'123456');
    select * from borrower;
    

    在这里插入图片描述
    :可见在借阅人表中可以执行插入数据操作,但是不允许重复插入,因为主键重复冲突了。

  2. select * from borrower;
    update borrower set id = 1000000000004 where id = 1000000000003;
    select * from borrower;
    update borrower set `name` = '许和雅' where id = 1000000000004;
    select * from borrower;
    update borrower set id = 1000000000002 where id = 1000000000004;
    select * from borrower;
    

    在这里插入图片描述
    :可见借阅人表可以正常修改数据,这里只展示证件号和姓名修改,其他列修改类似,但是 不同 的是,其他列可以修改成有重复的值,而证件号这一列却不可以,原因还是 主键冲突,不能有两个及以上相同的证件号出现。

    在修改借阅人表的同时,与其关联的借阅信息表的数据同样会被修改

    select * from information;
    update borrower set id = 9999999999999 where id = 2020312011047;
    select * from borrower;
    select * from information;
    update borrower set id = 2020312011047 where id = 9999999999999;
    

    在这里插入图片描述
    :这是因为在借阅信息表中有级联外键,父表(借阅人表)修改后,子表(借阅信息表)也跟着修改(只适用于主键)。

  3. select * from borrower;
    delete from borrower where borrower.id = 1000000000004;
    select * from borrower;
    

    在这里插入图片描述
    :可见借阅人表可以正常删除数据,而与其关联的借阅信息表中的数据本来是不会删除的,但是在我写的程序里面会删除(因为在删除前创建了触发器),此样例将在后面给出。

2.2 图书表

下面对图书表(book)进行增删改查操作,查看是否可以正常执行。


  1. 由于太多列不好展示,这里只展示重要的几列数据。

    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    INSERT INTO book VALUES(999999999999,'《图书借阅系统》','工业技术','在架上','小邓在森林','这是我写的图书借阅系统','武汉大学出版社','2023','TP999','数学与统计学院',DEFAULT);
    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    INSERT INTO book VALUES(999999999999,'《图书借阅系统》','工业技术','在架上','小邓在森林','这是我写的图书借阅系统','武汉大学出版社','2023','TP999','数学与统计学院',DEFAULT);
    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    

    在这里插入图片描述
    :可见图书表可以正常插入数据,但是不能插入相同图书编号的数据,还是因为主键冲突。

  2. select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    update book set id = 888888888888 where id = 999999999999;
    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    update book set `name` = '《图书借阅系统-小邓在森林》' where id = 888888888888;
    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    update book set id = 101101699410 where id = 888888888888;
    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    

    在这里插入图片描述
    在这里插入图片描述
    :可见图书表可以正常修改数据,这里只展示图书编号和书名的修改,其他列修改类似,但是不同的是,其他列可以修改成有重复的值,而图书编号这一列却不可以,原因同样是主键冲突。

    同样修改图书表图书编号后,与其关联的借阅信息表中的图书编号也会相应修改:

    select * from information;
    update book set id = 666666666666 where id = 101102275625;
    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    select * from information;
    update book set id = 101102275625 where id = 666666666666;
    

    在这里插入图片描述
    :可见修改图书表的图书编号,借阅信息表的图书编号也相应发生改变,这是因为在借阅信息表中有 级联外键,父表(图书表)修改后,子表(借阅信息表)也跟着修改(只适用于主键)。

  3. select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    delete from book where book.id = 888888888888;
    select book.id as 图书编号, book.`name` as 书名, book.author as 作者 from book;
    

    在这里插入图片描述
    :而在图书表中删除数据后,本来借阅信息表中相关的数据是不会删除的,但是我新建了图书表删除后的触发器,可以实现图书表删除数据后,与其关联的借阅信息表中相关的数据与同时删除,详见后面触发器样例演示。

2.3 借阅信息表

借阅信息表可以正常插入数据,如果没有触发器限制的话,借阅信息表是可以重复插入相同数据的,因为借阅信息表的主键是自动增长型的数值。

但是由于我们创建了触发器限制,于是有 6 种情况禁止插入新数据,分别是:

  1. 证件号不存在;
  2. 借阅人等级为 01-5 可以借书);
  3. 借阅书籍数目达到限额;
  4. 书籍重复借入(书籍没还的情况下再次借同一本书籍);
  5. 图书被他人借阅(线下借、还书基本上不会出现此种情况);
  6. 图书不存在(此情况基本上不存在,只有误操作的时候才会出现此种情况)。

6 种情况将在后面触发器部分展示。

# 禁止人为对信息借阅表进行插入、修改以及删除数据操作
/*
# 对借阅信息表进行插入数据操作
select * from information;
INSERT INTO information VALUES(DEFAULT,2021312011002,101102308670,CURDATE(),DEFAULT,DEFAULT);
select * from information;
INSERT INTO information VALUES(DEFAULT,2021312011002,101102308670,CURDATE(),DEFAULT,DEFAULT);
select * from information;

# 对借阅信息表进行修改数据操作
select * from information;
update information set borrowerid = 9999999999999 where borrowerid = 2021312011002;
update information set bookid = 888888888888 where bookid = 101102308670;
update information set leadDate = '2000-01-01' where borrowerid = 2021312011002 and bookid = 101102308670;
update information set returnDate = '2000-01-20' where borrowerid = 2021312011002 and bookid = 101102308670;
update information set returnDateReality = '2000-01-01' where borrowerid = 2021312011002 and bookid = 101102308670;
select * from information;

# 对借阅信息表进行删除数据操作
select * from information;
delete from information where borrowerid = 2021312011002 and bookid = 101102308670;
select * from information;
delete from information where leadDate = '2023-05-05';
*/

:但是由于在借阅人表中的已借数目计算过程中(每次更新借阅信息表时,已借数目就会 -1,相当于还书操作,当已借数目为 0 时,表示没有书籍借入,因此无法再对借阅信息表进行修改),因此 不建议 在借阅信息表中修改数据,这样会导致整个系统出现问题!

!!!再一次提醒,自行测试了数据表的读者请删除此数据库,并重新创建!!!
即运行下述代码:

# 先删除数据库
DROP DATABASE IF EXISTS library;
# 创建数据库
CREATE DATABASE IF NOT EXISTS `library` 
DEFAULT CHARACTER SET 'gb18030' 
DEFAULT COLLATE 'gb18030_chinese_ci';

set global log_bin_trust_function_creators=TRUE;
# ===================================== 第一部分 =====================================

use library;
# 删除表(如果存在的话)
DROP TABLE IF EXISTS borrower;
# 创建"借阅人"表
CREATE TABLE IF NOT EXISTS `library`.`borrower`  (
  `id` char(13) NOT NULL COMMENT '证件号',
  `name` varchar(20) NULL DEFAULT NULL COMMENT '姓名',
  `sex` enum('男','女') NULL DEFAULT '男' COMMENT '性别(男【默认值】、女)',
  `category` enum('教师','本科生','研究生') NOT NULL DEFAULT '本科生' COMMENT '类别(教师、本科生【默认值】、研究生)',
  `borrowedCount` int(7) UNSIGNED NOT NULL DEFAULT 0 COMMENT '已借数目(无符号,默认零)',
	`borrowedAll` int(7) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总借书数(无符号,默认零)',
  `tel` char(11) NOT NULL UNIQUE
			CHECK(LENGTH(TRIM(tel))=11 AND LEFT(tel,1)='1')
			COMMENT '手机号',
  `email` varchar(50) NOT NULL COMMENT '邮箱',
  `grade` tinyint(1) UNSIGNED NOT NULL DEFAULT 5 COMMENT '借阅人等级(0,1,2,3,4,5【默认值】)',
  `password` varchar(50) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
);

# 删除图书表
DROP TABLE IF EXISTS book;
# 创建图书表
CREATE TABLE `library`.`book`  (
  `id` char(12) NOT NULL COMMENT '图书编号',
  `name` varchar(50) NOT NULL COMMENT '书名',
  `category` enum('马克思主义、列宁主义、毛泽东思想、邓小平理论','哲学、宗教','社会科学总论','政治、法律','军事','经济','文化、科学、教育、体育','语言、文字','文学','艺术','历史、地理','自然科学总论','数理科学和化学','天文学、地球科学','生物科学','医药、卫生','工业技术','农业科学','交通运输','航空、航天','环境科学、安全科学','综合性图书') NOT NULL COMMENT '类别(马克思主义、列宁主义、毛泽东思想、邓小平理论,哲学、宗教,社会科学总论,政治、法律,军事,经济,文化、科学、教育、体育,语言、文字,文学,艺术,历史、地理,自然科学总论,数理科学和化学,天文学、地球科学,生物科学,医药、卫生,工业技术,农业科学,交通运输,航空、航天,环境科学、安全科学,综合性图书)',
  `state` enum('在架上','已借出') NOT NULL DEFAULT '在架上' COMMENT '是否借出(在架上【默认值】,已借出)',
  `author` varchar(20) NOT NULL COMMENT '作者',
  `introduction` varchar(2000) NULL COMMENT '图书简介',
  `press` varchar(50) NOT NULL COMMENT '出版社',
  `publishDate` year NOT NULL COMMENT '出版时间',
  `callNum` char(20) NOT NULL COMMENT '索书号',
  `location` varchar(255) NOT NULL COMMENT '馆藏位置',
  `lendCount` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '借阅次数(无符号,默认取零)',
  PRIMARY KEY (`id`)
);


# 删除借阅信息表
DROP TABLE IF EXISTS information;
# 创建借阅信息表
CREATE TABLE `library`.`information`  (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '借阅编号(自动增长,无符号)',
  `borrowerid` char(13) NOT NULL COMMENT '证件号',
  `bookid` char(12) NOT NULL COMMENT '图书编号',
  `leadDate` date NOT NULL COMMENT '借出日期',
  `returnDate` date GENERATED ALWAYS AS (FROM_DAYS(TO_DAYS(leadDate) + 30)) STORED COMMENT '应归还日期(计算字段,每本书可借30天)' NULL,
  `returnDateReality` date NULL DEFAULT NULL COMMENT '实际归还日期(未归还时为空)',
  PRIMARY KEY (`id`)
);


# 设置外键
ALTER TABLE `library`.`information` 
ADD CONSTRAINT `fk_borrowerid` FOREIGN KEY (`borrowerid`) REFERENCES `library`.`borrower` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `fk_bookid` FOREIGN KEY (`bookid`) REFERENCES `library`.`book` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;


# =======================================
# 向借阅人表添加数据
INSERT INTO borrower VALUES(2020312011047,'小邓在森林','男','本科生',3,3,13168968999,'CSDN_deng@whu.edu.cn',2,'123456'),
													 (1000000000001,'康卓','男','教师',0,1,13125168999,'kang@163.com',5,'123456'),
													 (2020312011001,'Tony','男','本科生',1,1,13612288888,'Tony@163.com',5,'tony123456'),
													 (2021312011002,'森林','男','研究生',DEFAULT,DEFAULT,17765499263,'senlin@qq.com',5,'senlin_jisuanji'),
													 (2019311010065,'Mary','女','本科生',0,1,15088198250,'Mary@gmail.com',5,'ajndj_6556asdhabd'),
													 (2018210210205,'张三','男','研究生',0,1,17766877652,'zhangsan@qq.com',5,'fawaikuangtujiushiwo'),
													 (1000000000002,'许和雅','女','教师',1,1,18927763056,'18927763056@163.com',5,'jkja_hjsbj5665_naAAA'),
													 (2022312011029,'冯红云','女','研究生',DEFAULT,DEFAULT,13908623506,'2022312011029@whu.edu.cn',5,'bsadhj32e_5SAS53'),
													 (2023302010007,'刘一凡','男','本科生',DEFAULT,DEFAULT,13702345067,'13702345067@163.com',5,'66666666'),
													 (2022312011047,'张海','男','本科生',1,1,18985107123,'2022312011047@whu.edu.cn',5,'88888888'),
													 (2020301110066,'雷淳雅','女','研究生',1,1,13707761223,'2020301110066@whu.edu.cn',5,'ajck6515a_cj'),
													 (2023513266556,'郭靖','男','本科生',1,1,17725108427,'2023513266556@whu.edu.cn',5,'woaihuangrong'),
													 (2023513266557,'黄蓉','女','本科生',DEFAULT,DEFAULT,17715108427,'2023513266557@whu.edu.cn',5,'woaiguojing'),
													 (2022202365655,'张三丰','男','研究生',DEFAULT,DEFAULT,17715156632,'2022202365655@whu.edu.cn',5,'ilikecomputer'),
													 (2019301021002,'陈启','女','本科生',1,1,13521234567,'2019301021002@whu.edu.cn',5,'duiaidnk66556');


# 向图书表添加数据
INSERT INTO book VALUES(101102275625,'PyQt 5快速开发与实战','工业技术','已借出','王硕, 孙洋洋','本书对PyQt 5基础知识比较全面的介绍, 同时对新手使用PyQt 5的一些重点、难点都有专门的章节进行针对性分析, 还重点介绍了如何把Python的一些重量级模块(Pandas、Matplotlib和Plotly)嵌入到PyQt 5中, 从而极大地节约开发时间。最后, 给出一些综合性较强的实战案例, 帮助读者快速掌握PyQt 5的实战应用。','北京 : 电子工业出版社','2017','TP311.561/W218','工学馆自科图书借阅区',1),
											 (101102275623,'PyQt 5快速开发与实战','工业技术','在架上','王硕, 孙洋洋','本书对PyQt 5基础知识比较全面的介绍, 同时对新手使用PyQt 5的一些重点、难点都有专门的章节进行针对性分析, 还重点介绍了如何把Python的一些重量级模块(Pandas、Matplotlib和Plotly)嵌入到PyQt 5中, 从而极大地节约开发时间。最后, 给出一些综合性较强的实战案例, 帮助读者快速掌握PyQt 5的实战应用。','北京 : 电子工业出版社','2017','TP311.561/W218','总馆中文图书借阅A2-A5',DEFAULT),
											 (101102275622,'PyQt 5快速开发与实战','工业技术','已借出','王硕, 孙洋洋','本书对PyQt 5基础知识比较全面的介绍, 同时对新手使用PyQt 5的一些重点、难点都有专门的章节进行针对性分析, 还重点介绍了如何把Python的一些重量级模块(Pandas、Matplotlib和Plotly)嵌入到PyQt 5中, 从而极大地节约开发时间。最后, 给出一些综合性较强的实战案例, 帮助读者快速掌握PyQt 5的实战应用。','北京 : 电子工业出版社','2017','TP311.561/W218','信息馆借阅区2楼东',1),
											 (101102275624,'PyQt 5快速开发与实战','工业技术','在架上','王硕, 孙洋洋','本书对PyQt 5基础知识比较全面的介绍, 同时对新手使用PyQt 5的一些重点、难点都有专门的章节进行针对性分析, 还重点介绍了如何把Python的一些重量级模块(Pandas、Matplotlib和Plotly)嵌入到PyQt 5中, 从而极大地节约开发时间。最后, 给出一些综合性较强的实战案例, 帮助读者快速掌握PyQt 5的实战应用。','北京 : 电子工业出版社','2017','TP311.561/W218','工学馆自科图书借阅区',DEFAULT),
											 (101102698766,'PyTorch深度学习入门','工业技术','在架上','曾芃壹','本书以图文并貌的形式、浅显易懂的语言仔细讲解了深度学习的基础知识。从如何挑选硬件到神经网络的初步搭建,再到实现图片识别、文本翻译、强化学习、生成对抗网络等多个目前最流行的深度学习应用。本书用Python语言,基于目前流行的PyTorch框架,编写代码实现了各种深度学习的应用程序,让理论和实践紧密结合。','北京 : 人民邮电出版社','2019','TP181/Z167','总馆中文图书借阅A2-A5',DEFAULT),
											 (101102512651,'PyTorch深度学习入门','工业技术','已借出','曾芃壹','本书以图文并貌的形式、浅显易懂的语言仔细讲解了深度学习的基础知识。从如何挑选硬件到神经网络的初步搭建,再到实现图片识别、文本翻译、强化学习、生成对抗网络等多个目前最流行的深度学习应用。本书用Python语言,基于目前流行的PyTorch框架,编写代码实现了各种深度学习的应用程序,让理论和实践紧密结合。','北京 : 人民邮电出版社','2019','TP181/Z167','信息馆借阅区2楼东',2),
											 (101102512652,'PyTorch深度学习入门','工业技术','已借出','曾芃壹','本书以图文并貌的形式、浅显易懂的语言仔细讲解了深度学习的基础知识。从如何挑选硬件到神经网络的初步搭建,再到实现图片识别、文本翻译、强化学习、生成对抗网络等多个目前最流行的深度学习应用。本书用Python语言,基于目前流行的PyTorch框架,编写代码实现了各种深度学习的应用程序,让理论和实践紧密结合。','北京 : 人民邮电出版社','2019','TP181/Z167','信息馆借阅区2楼东',1),
											 (101102699724,'矩阵论千题习题详解','数理科学和化学','在架上','方保镕','本书涵盖了清华大学出版社《矩阵论》(第3版)一书中约1200道习题和自测题的解答。部分习题给出了多种解法并作了一些评注。这些习题大致可分为两种类型:基础题型用以巩固所学的知识,加深对基本概念的理解;综合题型是训练读者灵活运用前面所学知识的能力。','北京 : 清华大学出版社','2021','O151.21/F1653/p','总馆中文阅览区B2',1),
											 (101102699725,'矩阵论千题习题详解','数理科学和化学','已借出','方保镕','本书涵盖了清华大学出版社《矩阵论》(第3版)一书中约1200道习题和自测题的解答。部分习题给出了多种解法并作了一些评注。这些习题大致可分为两种类型:基础题型用以巩固所学的知识,加深对基本概念的理解;综合题型是训练读者灵活运用前面所学知识的能力。','北京 : 清华大学出版社','2021','O151.21/F1653/p','总馆中文图书借阅A2-A5',1),
											 (101102584721,'凸优化理论与算法','数理科学和化学','在架上','张海斌, 张凯丽','本书系统地阐述了凸优化的理论与算法,首先介绍必要的凸分析基础知识,然后讨论对偶理论与最优性条件,它们作为基础对凸优化算法的理论分析起着十分重要的作用,最后讲述凸优化算法。本书基本涵盖了所有的关键性证明,尽量为读者节省查阅其他文献的时间,同时也收录了一些相关领域的最新研究成果,所涉及内容有着广泛的应用前景.','北京 : 科学出版社','2020','O174.13/Z271','总馆中文阅览区B2',DEFAULT),
											 (101102584722,'凸优化理论与算法','数理科学和化学','已借出','张海斌, 张凯丽','本书系统地阐述了凸优化的理论与算法,首先介绍必要的凸分析基础知识,然后讨论对偶理论与最优性条件,它们作为基础对凸优化算法的理论分析起着十分重要的作用,最后讲述凸优化算法。本书基本涵盖了所有的关键性证明,尽量为读者节省查阅其他文献的时间,同时也收录了一些相关领域的最新研究成果,所涉及内容有着广泛的应用前景.','北京 : 科学出版社','2020','O174.13/Z271','总馆中文图书借阅A2-A5',1),
											 (101102713690,'人工智能习题解析与实践','工业技术','已借出','朱福喜, 朱丽达','本书共16章,内容包括:用搜索求解问题的基本原理、搜索的基本策略、图搜索策略、博弈与搜索、演化搜索算法等。','北京 : 清华大学出版社','2019','TP18/Z712c3/p','总馆中文图书借阅A2-A5',1),
											 (101102510900,'人工智能习题解析与实践','工业技术','在架上','朱福喜, 朱丽达','本书共16章,内容包括:用搜索求解问题的基本原理、搜索的基本策略、图搜索策略、博弈与搜索、演化搜索算法等。','北京 : 清华大学出版社','2019','TP18/Z712c3/p','信息馆借阅区2楼东',DEFAULT),
											 (101102620212,'人工智能习题解析与实践','工业技术','在架上','朱福喜, 朱丽达','本书共16章,内容包括:用搜索求解问题的基本原理、搜索的基本策略、图搜索策略、博弈与搜索、演化搜索算法等。','北京 : 清华大学出版社','2019','TP18/Z712c3/p','信息馆借阅区2楼东',DEFAULT),
											 (101102713691,'人工智能习题解析与实践','工业技术','在架上','朱福喜, 朱丽达','本书共16章,内容包括:用搜索求解问题的基本原理、搜索的基本策略、图搜索策略、博弈与搜索、演化搜索算法等。','北京 : 清华大学出版社','2019','TP18/Z712c3/p','医学馆中文科技借阅B',DEFAULT),
											 (451100004441,'人工智能习题解析与实践','工业技术','在架上','朱福喜, 朱丽达','本书共16章,内容包括:用搜索求解问题的基本原理、搜索的基本策略、图搜索策略、博弈与搜索、演化搜索算法等。','北京 : 清华大学出版社','2019','TP18/Z712c3/p','计算机学院资料室',DEFAULT),
											 (101700033107,'SPSS 22.0统计分析从入门到精通','社会科学总论','在架上','李昕, 张明明','本书以SPSS 22.0为平台,由浅入深地全面讲解SPSS软件的相关知识,通过图文并茂的方式讲解各项操作,深入浅出,实例引导,讲解翔实,清晰、直观、易学易用。全书分为三部分共19章,详细介绍SPSS的界面、数据文件的编辑、数据文件的整理、基本统计分析、参数估计与假设检验、非参数检验、方差分析、相关分析、回归分析、聚类分析、判别分析、因子分析、对应分析、信度分析、生存分析、时间序列分析、统计图形的绘制、SPSS在企业经济活动和房地产中的应用等内容。本书涉及面广,涵盖了一般用户需要使用的各种功能,全书按逻辑顺序编排,自始至终结合实例进行描述,内容完整且每章相对独立,是一本详细实用的SPSS参考书。','北京 : 电子工业出版社','2015','C819/L334','总馆中文图书借阅A2-A5',DEFAULT),
											 (101700037671,'SPSS 22.0统计分析从入门到精通','社会科学总论','在架上','李昕, 张明明','本书以SPSS 22.0为平台,由浅入深地全面讲解SPSS软件的相关知识,通过图文并茂的方式讲解各项操作,深入浅出,实例引导,讲解翔实,清晰、直观、易学易用。全书分为三部分共19章,详细介绍SPSS的界面、数据文件的编辑、数据文件的整理、基本统计分析、参数估计与假设检验、非参数检验、方差分析、相关分析、回归分析、聚类分析、判别分析、因子分析、对应分析、信度分析、生存分析、时间序列分析、统计图形的绘制、SPSS在企业经济活动和房地产中的应用等内容。本书涉及面广,涵盖了一般用户需要使用的各种功能,全书按逻辑顺序编排,自始至终结合实例进行描述,内容完整且每章相对独立,是一本详细实用的SPSS参考书。','北京 : 电子工业出版社','2015','C819/L334','总馆中文图书借阅A2-A5',DEFAULT),
											 (101101926385,'SPSS 22.0统计分析从入门到精通','社会科学总论','在架上','李昕, 张明明','本书以SPSS 22.0为平台,由浅入深地全面讲解SPSS软件的相关知识,通过图文并茂的方式讲解各项操作,深入浅出,实例引导,讲解翔实,清晰、直观、易学易用。全书分为三部分共19章,详细介绍SPSS的界面、数据文件的编辑、数据文件的整理、基本统计分析、参数估计与假设检验、非参数检验、方差分析、相关分析、回归分析、聚类分析、判别分析、因子分析、对应分析、信度分析、生存分析、时间序列分析、统计图形的绘制、SPSS在企业经济活动和房地产中的应用等内容。本书涉及面广,涵盖了一般用户需要使用的各种功能,全书按逻辑顺序编排,自始至终结合实例进行描述,内容完整且每章相对独立,是一本详细实用的SPSS参考书。','北京 : 电子工业出版社','2015','C819/L334','总馆中文图书借阅A2-A5',DEFAULT),
											 (101102210607,'SPSS 22.0统计分析从入门到精通','社会科学总论','在架上','李昕, 张明明','本书以SPSS 22.0为平台,由浅入深地全面讲解SPSS软件的相关知识,通过图文并茂的方式讲解各项操作,深入浅出,实例引导,讲解翔实,清晰、直观、易学易用。全书分为三部分共19章,详细介绍SPSS的界面、数据文件的编辑、数据文件的整理、基本统计分析、参数估计与假设检验、非参数检验、方差分析、相关分析、回归分析、聚类分析、判别分析、因子分析、对应分析、信度分析、生存分析、时间序列分析、统计图形的绘制、SPSS在企业经济活动和房地产中的应用等内容。本书涉及面广,涵盖了一般用户需要使用的各种功能,全书按逻辑顺序编排,自始至终结合实例进行描述,内容完整且每章相对独立,是一本详细实用的SPSS参考书。','北京 : 电子工业出版社','2015','C819/L334','总馆中文图书借阅A2-A5',DEFAULT),
											 (101700033106,'SPSS 22.0统计分析从入门到精通','社会科学总论','在架上','李昕, 张明明','本书以SPSS 22.0为平台,由浅入深地全面讲解SPSS软件的相关知识,通过图文并茂的方式讲解各项操作,深入浅出,实例引导,讲解翔实,清晰、直观、易学易用。全书分为三部分共19章,详细介绍SPSS的界面、数据文件的编辑、数据文件的整理、基本统计分析、参数估计与假设检验、非参数检验、方差分析、相关分析、回归分析、聚类分析、判别分析、因子分析、对应分析、信度分析、生存分析、时间序列分析、统计图形的绘制、SPSS在企业经济活动和房地产中的应用等内容。本书涉及面广,涵盖了一般用户需要使用的各种功能,全书按逻辑顺序编排,自始至终结合实例进行描述,内容完整且每章相对独立,是一本详细实用的SPSS参考书。','北京 : 电子工业出版社','2015','C819/L334','总馆多媒体阅览区',DEFAULT),
											 (101102637877,'《暴力在历史中的作用》','马克思主义、列宁主义、毛泽东思想、邓小平理论','已借出','吴兴德','本书是“马克思主义经典文献传播通考”丛书的其中一部。是对曹汀所翻译的《暴力在历史中的作用》的背景和地位进行介绍, 考证其历史价值与学术贡献, 并做考释与译文解析。','沈阳 : 辽宁人民出版社','2021','A811.24/B278','总馆中文阅览区C1-C4',1),
											 (101102051108,'精神交往论 : 马克思恩格斯的传播观','马克思主义、列宁主义、毛泽东思想、邓小平理论','在架上','陈力丹','《精神交往论:马克思恩格斯的传播观》从信息传播的角度,系统展现了马克思和恩格斯开放的思想体系。全书论证了他们历史唯物主义的传播理论、世界交往的基本理念,详尽地阐述了他们所谈到的几乎所有涉及人类传播的各种现象和形态,诸如思维、语言、文字、印刷术、宗教、文艺、宣传、新闻、报刊等等。还论证了他们关于传播与法、传播心理、工人政党内部的精神交往、人类传播历经的三个发展形态等等观点。','北京 : 中国人民大学出版社','2016','A811.67/C332a2','总馆中文图书借阅A2-A5',DEFAULT),
											 (341100043465,'精神交往论 : 马克思恩格斯的传播观','马克思主义、列宁主义、毛泽东思想、邓小平理论','在架上','陈力丹','《精神交往论:马克思恩格斯的传播观》从信息传播的角度,系统展现了马克思和恩格斯开放的思想体系。全书论证了他们历史唯物主义的传播理论、世界交往的基本理念,详尽地阐述了他们所谈到的几乎所有涉及人类传播的各种现象和形态,诸如思维、语言、文字、印刷术、宗教、文艺、宣传、新闻、报刊等等。还论证了他们关于传播与法、传播心理、工人政党内部的精神交往、人类传播历经的三个发展形态等等观点。','北京 : 中国人民大学出版社','2016','A811.67/C332a2','新闻与传播学院资料室',1),
											 (351100061116,'精神交往论 : 马克思恩格斯的传播观','马克思主义、列宁主义、毛泽东思想、邓小平理论','已借出','陈力丹','《精神交往论:马克思恩格斯的传播观》从信息传播的角度,系统展现了马克思和恩格斯开放的思想体系。全书论证了他们历史唯物主义的传播理论、世界交往的基本理念,详尽地阐述了他们所谈到的几乎所有涉及人类传播的各种现象和形态,诸如思维、语言、文字、印刷术、宗教、文艺、宣传、新闻、报刊等等。还论证了他们关于传播与法、传播心理、工人政党内部的精神交往、人类传播历经的三个发展形态等等观点。','北京 : 中国人民大学出版社','2016','A811.67/C332a2','政管、马院中文书库',1),
											 (101101699412,'《中观心论》及其古注《思择焰》研究','哲学、宗教','在架上','何欢欢','《中观心论》是清辩论师现存唯一的梵文著作,仅保存在丹珠尔中的《思择炎》则是《中观心论》的唯一古注,其中的《入抉择数论之真实品》、《入抉择胜论之真实品》、《入抉择吠檀多之真实品》是目前所知最早系统叙述并批判数论派、胜论派、吠檀多派思想理论的佛教文献。本文以这三品的梵文贝叶写本和藏译刻版写经为研究对象,结合相关梵文原典与汉译文献,考察了佛教中观派对数论派、胜论派、吠檀多派三大“外道”思想的记述与批判。本书为作者在北京大学的博士论文。','北京 : 中国社会科学出版社','2013','B946.9/H314','总馆中文图书借阅A2-A5',DEFAULT),
											 (101101699410,'《中观心论》及其古注《思择焰》研究','哲学、宗教','在架上','何欢欢','《中观心论》是清辩论师现存唯一的梵文著作,仅保存在丹珠尔中的《思择炎》则是《中观心论》的唯一古注,其中的《入抉择数论之真实品》、《入抉择胜论之真实品》、《入抉择吠檀多之真实品》是目前所知最早系统叙述并批判数论派、胜论派、吠檀多派思想理论的佛教文献。本文以这三品的梵文贝叶写本和藏译刻版写经为研究对象,结合相关梵文原典与汉译文献,考察了佛教中观派对数论派、胜论派、吠檀多派三大“外道”思想的记述与批判。本书为作者在北京大学的博士论文。','北京 : 中国社会科学出版社','2013','B946.9/H314','总馆中文图书借阅A2-A5',DEFAULT),
											 (321100120204,'当代中国政治法律制度','政治、法律','在架上','王文惠','本著作系统介绍新中国建立以后特别是改革开放以来,根据宪法的制度安排,在当代中国现行法律体系框架下,有关政治关系的法律制度。具体介绍当代中国的政党法律制度、人民代表大会法律制度、人民政府法律制度、民族区域自治法律制度、人民法院和人民检察院法律制度、基层民主法律制度、群团组织法律制度和特别行政区法律制度。','北京 : 中国社会科学出版社','2018','D926.04/W221','法学院中文图书借阅室',DEFAULT),
											 (101102398494,'当代中国政治法律制度','政治、法律','在架上','王文惠','本著作系统介绍新中国建立以后特别是改革开放以来,根据宪法的制度安排,在当代中国现行法律体系框架下,有关政治关系的法律制度。具体介绍当代中国的政党法律制度、人民代表大会法律制度、人民政府法律制度、民族区域自治法律制度、人民法院和人民检察院法律制度、基层民主法律制度、群团组织法律制度和特别行政区法律制度。','北京 : 中国社会科学出版社','2018','D926.04/W221','总馆中文图书借阅A2-A5',DEFAULT),
											 (101102308670,'《孙子兵法》新解 : 王阳明兵学智慧的源头','军事','在架上','(日) 冈田武彦','本书作者对《孙子兵法》的原文做了极平易的翻译,并从全新角度对《孙子兵法》进行了解读,尤其对《孙子兵法》的原理和精神做了重点的解说和分析。书中不仅对中国古代诸如曹操、杜牧、张预等注评家关于《孙子兵法》各条目的观点进行了分析和判断,而且吸收和采纳了山口春水、荻生徂徕、佐藤一斋等人的兵法研究成果,将孙子的兵法思想诠释出了跨越古今的极新高度。','重庆 : 重庆出版社','2017','E892.25/S841dc','总馆中文图书借阅A2-A5',DEFAULT);


# 向借阅信息表添加数据
INSERT INTO information VALUES(DEFAULT,1000000000001,341100043465,'2017-05-15',DEFAULT,'2017-05-30'),
															(DEFAULT,2019311010065,101102512651,'2020-10-20',DEFAULT,'2020-11-08'),
															(DEFAULT,2018210210205,101102699724,'2022-01-02',DEFAULT,'2022-01-30'),
															(DEFAULT,2020312011047,101102275625,'2023-01-10',DEFAULT,DEFAULT),
															(DEFAULT,2020301110066,101102275622,'2023-01-10',DEFAULT,DEFAULT),
															(DEFAULT,2022312011047,101102512652,'2023-02-01',DEFAULT,DEFAULT),
															(DEFAULT,2019301021002,101102584722,'2023-02-08',DEFAULT,DEFAULT),
															(DEFAULT,2020312011047,351100061116,'2023-02-23',DEFAULT,DEFAULT),
															(DEFAULT,1000000000002,101102637877,'2023-03-10',DEFAULT,DEFAULT),
															(DEFAULT,2020312011047,101102512651,'2023-04-10',DEFAULT,DEFAULT),
															(DEFAULT,2020312011001,101102699725,'2023-04-28',DEFAULT,DEFAULT),
															(DEFAULT,2023513266556,101102713690,'2023-05-05',DEFAULT,DEFAULT);

3. 功能代码

3.1 创建视图显示所有逾期未归还的借阅信息(包括借阅人姓名,借阅人类别,书名,借出日期,应归还日期,逾期时长);

# 删除视图
drop view if exists Overdue_view;
# 创建视图
CREATE VIEW `library`.`Overdue_view` AS SELECT
	borrower.`name` AS 借阅人姓名, 
	borrower.category AS 借阅人类别, 
	book.`name` AS 书名, 
	information.leadDate AS 借出日期, 
	information.returnDate AS 应归还日期,
	TO_DAYS(NOW()) - TO_DAYS(information.returnDate) AS '逾期时长(天)'
FROM
	book
	INNER JOIN
	information
	ON 
		book.id = information.bookid
	INNER JOIN
	borrower
	ON 
		information.borrowerid = borrower.id
WHERE returnDateReality IS NULL AND TO_DAYS(NOW()) - TO_DAYS(information.returnDate) > 0;

查看视图数据:

  1. 可以在可视化界面视图中双击查看数据:
    在这里插入图片描述

  2. 利用代码查看:

    SELECT * FROM overdue_view;
    

    在这里插入图片描述

例 1(附加)】利用刚刚创建的视图查询逾期未归还天数超过 220 天的借阅人信息。

SELECT id, `name`, category, tel, email FROM borrower
	WHERE `name` IN 
	(
		SELECT `借阅人姓名` 
			FROM overdue_view
			WHERE `逾期时长(天)` > 220
	);

在这里插入图片描述

3.2 创建存储过程,每借出一本图书,向借阅信息表中加入一条记录;

DROP PROCEDURE IF EXISTS p_InsertLeadInfo;
delimiter $
create procedure p_InsertLeadInfo(in borrowerid char(13), in bookid char(12))
begin
	INSERT INTO information VALUES(DEFAULT,borrowerid,bookid,curdate(),DEFAULT,DEFAULT);
end$
delimiter ;

检测存储过程是否正确:

select * from information;
call p_InsertLeadInfo(2020312011047,101101699412);
select * from information;

测试结果如下:

在这里插入图片描述
可见存储过程能够正常向借阅信息表插入数据。

3.3 创建存储过程,每归还一本图书,修改借阅信息表中相应的记录;

drop PROCEDURE if EXISTS p_UpdateLeadInfo;
delimiter $
create procedure p_UpdateLeadInfo(in borrowerid char(13), in bookid char(12))
begin
	UPDATE information SET returnDateReality = curdate()
			WHERE information.borrowerid = borrowerid AND information.bookid = bookid AND information.returnDateReality IS NULL;
end$
delimiter ;

检测存储过程是否正确:

call p_UpdateLeadInfo(2020312011047,101101699412);
select * from information;

测试结果如下:
在这里插入图片描述
可见归还图书后,借阅信息表的已还日期得到更新,归还日期为当天日期,修改成功!

上一篇文章:【数据库——MySQL(实战项目1)】(1)图书借阅系统

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

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

相关文章

二叉搜索树--新增节点-力扣 701 题

例题细节二叉搜索树的基础操作-CSDN博客也讲过了&#xff08;put&#xff09;&#xff0c;下面给出递归实现 public TreeNode insertIntoBST(TreeNode node, int val) {//找到空位了if(node null) {return new TreeNode(val);}if(val < node.val) {//一直找到有null的位置…

草柴返利APP如何查询领取天猫内部隐藏优惠券购物拿天猫返利?

草柴返利APP是一种简单、快捷的购物省钱工具&#xff0c;可以帮助你在天猫上查询并领取内部隐藏优惠券&#xff0c;确认收货后拿购物返利。草柴返利APP可以轻松查询到天猫优惠券&#xff0c;让你购物更加方便&#xff0c;享受更多的折扣优惠。 草柴返利APP如何查询领取天猫优惠…

2、使用阿里云镜像加速器提升Docker的资源下载速度

1、注册阿里云账号并登录 https://www.aliyun.com/ 2、进入个人控制台&#xff0c;找到“容器镜像服务” 3、在“容器镜像服务”中找到“镜像加速器” 4、在右侧列表中会显示你的加速器地址&#xff0c;复制地址 5、进入/etc/docker目录&#xff0c;编辑daemon.json&#xff0…

jumpserver如何录入web资产

需要部署远程应用发布机&#xff0c;此机器需新建一台Windows机器&#xff0c;不要加域 本次环境&#xff1a;Windows 2019 server标准版&#xff0c;8U16G 系统设置-远程应用 设置完成后提交。 此发布机上需预先安装openssh&#xff0c;否则jumpserver无法部署应用发布机 …

第二章 进程与线程 二十、死锁的处理策略(预防死锁、避免死锁、死锁的检测和解除)

目录 一、分类 二、预防死锁 1、破坏互斥条件 2、破坏不剥夺条件 3、破坏请求和保持条件 4、破坏循环等待条件 5、总结 三、避免死锁 1、什么是安全序列 2、安全状态和不安全状态 3、银行家算法 &#xff08;1&#xff09;核心思想 &#xff08;2&#xff09;例子 …

【ElasticSearch】使用 Java 客户端 RestClient 实现对文档的查询操作,以及对搜索结果的排序、分页、高亮处理

文章目录 前言&#xff1a;RestClient 查询文档的 RestAPI一、全文检索查询1.1 match_all 查询1.2 match 查询1.3 multi_match 查询 二、精确查询2.1 term 查询2.2 range 查询 三、复合查询&#xff1a;Boolean 查询与 function score 查询的综合案例四、对查询结果的处理4.1 将…

关于Qualifier你要知道的二三事

&#x1f35e; Qualifier注解的作用-定义Bean-指定Bean的名称 Qualifier注解可以区分具有相同类型的多个Bean&#xff0c;用于明确指定要注入的Bean的名称或限定符。通过为要注入的Bean添加 Qualifier注解&#xff0c;你可以告诉Spring应该使用哪个Bean&#xff0c;以解决Spri…

黑马JVM总结(三十一)

&#xff08;1&#xff09;类加载器-概述 启动类加载器-扩展类类加载器-应用程序类加载器 双亲委派模式&#xff1a; 类加载器&#xff0c;加载类的顺序是先依次请问父级有没有加载&#xff0c;没有加载自己才加载&#xff0c;扩展类加载器在getParent的时候为null 以为Boots…

zabbix监控实战1

1、zabbix监控平台部署 重新克隆纯净虚拟机 数据库初始化 修改密码为WHqwerty123 初始化完成 创建zabbix数据库 基础配置和服务启动 访问 2、zabbix添加监控节点 修改字体文件 在客户端 手动添加监控节点 自动添加监控节点 3、zabbix api 自动注册 停掉自动发现 删掉serve…

VMware 下模拟软 RAID 的创建及故障恢复

Author&#xff1a;rab 目录 前言一、创建 RAID1.1 环境1.2 什么是 RAID&#xff1f;1.3 软 RAID 和硬 RAID1.4 如何创建软 RAID&#xff1f; 二、故障模拟与数据恢复2.1 故障模拟2.2 故障恢复 思考&#xff1f; 前言 一块物理硬盘要投入生产使用&#xff0c;一般会经历一下这…

面试经典 150 题 2 —(滑动窗口)— 3. 无重复字符的最长子串

3. 无重复字符的最长子串 方法 class Solution { public:int lengthOfLongestSubstring(string s) {int result 0, length s.length();int start 0, end 0;while(end < length){// 发现有重复字符时&#xff0c;可以直接把左指针移动到第一个重复字符的下一个位置for(i…

Web前端-Vue2+Vue3基础入门到实战项目-Day3(生命周期, 案例-小黑记账清单, 工程化开发入门)

Web前端-Vue2Vue3基础入门到实战项目-Day3 生命周期生命周期 & 生命周期四个阶段生命周期钩子生命周期案例created应用mounted应用 案例 - 小黑记账清单工程化开发入门工程化开发和脚手架项目运行流程index.htmlmain.js 组件化组件注册局部注册全局注册 来源 生命周期 生命…

1312. 序列统计

1312. 序列统计 - AcWing题库 L~R范围可以等同于0~R-L范围 相当于在R-L1个数中选出k个数 令 则变为 相当于在R-Lk个数中选出k个数 需要计算 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;t…

Filter(过滤器)Intercerptor(拦截器)

Filter过滤器 顾名思义&#xff0c;Filter可以对请求进行过滤&#xff0c;当浏览器发送请求时&#xff0c;首先先会被Filter进行拦截&#xff0c;Filter可以决定此次拦截是否放行&#xff0c;如果选择放行&#xff0c;放行之后还会返回Filter执行剩下的代码。 使用方法&…

YOLOv7独家改进:Multi-Dconv Head Transposed Attention注意力,效果优于MHSA| CVPR2022

💡💡💡本文独家改进:Multi-Dconv Head Transposed Attention注意力,可以高效的进行高分辨率图像处理,从而提升检测精度 MDTA | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 �…

初识Java 13-2 异常

目录 标准Java异常 新特性&#xff1a;更好的NullPointerException报告机制 使用finally执行清理 finally有什么用 在return时使用finally 缺陷&#xff1a;异常丢失 异常的约束 构造器 本笔记参考自&#xff1a; 《On Java 中文版》 标准Java异常 Throwable类描述了任…

项目生命周期

阶段 项目经理或组织可以将每一个项目划分为若干个阶段&#xff0c;以便于有效地进行管理控制&#xff0c;并实施该项目组织的日常运作联系起来。 项目划分为四个阶段&#xff1a;概念、计划、实施、结束 生命期 项目阶段合在一起称为项目生命期&#xff0c;项目生命期确定了将…

Go流程控制与快乐路径原则

Go流程控制与快乐路径原则 文章目录 Go流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的优先级…

【k8s】ingress-nginx通过header路由到不同后端

K8S中ingress-nginx通过header路由到不同后端 背景 公司使用ingress-nginx作为网关的项目&#xff0c;需要在相同域名、uri&#xff0c;根据header将请求转发到不同的后端中在稳定发布的情况下&#xff0c;ingress-nginx是没有语法直接支持根据header做转发的。但是这个可以利…

ubuntu配置yolov5环境

本文硬件平台为工控机&#xff0c;系统环境为ubuntu18 配置yolov5步骤 1.下载pytorch和torchvision软件包 由于在线安装容易出现安装失败&#xff0c;所以本文使用的是本地安装。本文是基于miniconda安装的&#xff0c;miniconda安装参考之前的博客&#xff1a;ubuntu中安装m…