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

目录

  • 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 UNIQUECHECK(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 SELECTborrower.`name` AS 借阅人姓名, borrower.category AS 借阅人类别, book.`name` AS 书名, information.leadDate AS 借出日期, information.returnDate AS 应归还日期,TO_DAYS(NOW()) - TO_DAYS(information.returnDate) AS '逾期时长(天)'
FROMbookINNER JOINinformationON book.id = information.bookidINNER JOINborrowerON 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 borrowerWHERE `name` IN (SELECT `借阅人姓名` FROM overdue_viewWHERE `逾期时长(天)` > 220);

在这里插入图片描述

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

DROP PROCEDURE IF EXISTS p_InsertLeadInfo;
delimiter $
create procedure p_InsertLeadInfo(in borrowerid char(13), in bookid char(12))
beginINSERT 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))
beginUPDATE 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)图书借阅系统
下一篇文章:【数据库——MySQL(实战项目1)】(3)图书借阅系统——存储函数

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

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

相关文章

简单聊聊低代码

在数字经济迅速发展的背景下,越来越多的企业开始建立健全业务系统、应用、借助数字化工具提升管理效率,驱动业务发展,促进业绩增长。在这一过程中,和许多新技术一样,低代码(Low-code)开发被推上…

各种业务场景调用API代理的API接口教程

API代理的API接口在各种业务场景中具有广泛的应用,本文将介绍哪些业务场景可以使用API代理的API接口,并提供详细的调用教程和代码演示,同时,我们还将讨论在不同场景下使用API代理的API接口所带来的好处。 哪些业务场景可以使用API…

分布式系统开发技术中的CAP定理原理

分布式系统开发技术中的CAP定理原理 在分布式系统开发中,CAP定理(一致性、可用性和分区容忍性)是指导我们设计、开发和维护系统的核心原理。该定理阐述了分布式系统中一致性、可用性和扩展性之间无法同时满足的矛盾关系,为我们提…

沪深300期权一个点多少钱?

经中国证监会批准,深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约,下文介绍沪深300期权一个点多少钱?本文来自:期权酱 一、沪深300期权涨…

安全设备和防火墙

文章目录 微步TDP态势感知防火墙防火墙的负载均衡 微步TDP态势感知 安全设备的主要功能在黑名单,只要记住黑名单的功能在哪即可 常用的是威胁选项卡的监控功能,监控模块会把实时的告警列出来,只要列出来就能分析流量是误报还是真实的&#x…

html与css知识点

html 元素分类 块级元素 1.独占一行,宽度为父元素宽度的100% 2.可以设置宽高 常见块级元素 h1~h6 div ul ol li dl dt dd table form header footer section nav article aside 行内元素 1.一行显示多个 2.不能设置宽高,宽高由元素内容撑开 常见行内…

论文精读-Semi-Supervised Classification with Graph Convolutional Networks

Semi-Supervised Classification with Graph Convolutional Networks 目录 Semi-Supervised Classification with Graph Convolutional Networks一、摘要介绍二、图上的快速近似卷积2.1 谱图卷积 (主要参考链接:[https://www.jianshu.com/p/35212baf6671…

深入了解进程:计算机中的任务管理与隔离

什么是进程? 进程是一个独立的执行环境,包括自己的内存空间、程序计数器、文件句柄等。每个进程都是操作系统的一个独立实例,它们之间通常相互隔离。 通俗来说,进程就是程序的一次执行过程,程序是静态的,它…

记录:R语言生成热图(非相关性)

今天解决了一个困扰了我很久的问题,就是如何绘制不添加相关性的热图。一般绘制热图是使用corrplot包画相关性图,但是这样有一个前提,就是输入的数据集必须进行相关性分析。那么如果我不需要进行相关性分析,而是直接绘制能够反应数…

Unity MRTK Hololens2眼动交互

/** ** UnityVersion : 2021.3.6f1* Description : 眼部交互基类* Author: * CreateTime : 2023-10-11 09:43:20* Version : V1.0.0* * */using System.Collections.Generic; using Microsoft.MixedReality.Toolkit.Input; using UnityEngine;namespace MRTKExtend.EyeTrackin…

flask vue跨域问题

问题: 调试时候跨域访问报: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法: 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…

探索乡村新风貌:VR全景记录乡村发展,助力乡村振兴

引言: 中国乡村正经历着巨大变革,长期以来,乡村地区一直面临着人口外流、资源匮乏等问题。然而,近年来,政府的政策支持以及新兴技术的崭露头角,如虚拟现实(VR)全景记录,…

22字符串-简单反转

目录 BM(Boyer-Moore) 坏字符 好后缀 什么情况用哪个规则? LeetCode之路——151. 反转字符串中的单词 分析: 字符串匹配中除了简单的BF(Brute Force)、RK(Rabin-Karp)算法,还有…

PPO算法逐行代码详解

前言:本文会从理论部分、代码部分、实践部分三方面进行PPO算法的介绍。其中理论部分会介绍PPO算法的推导流程,代码部分会给出PPO算法的各部分的代码以及简略介绍,实践部分则会通过debug代码调试的方式从头到尾的带大家看清楚应用PPO算法在car…

iMazing2023免费版苹果iPhone手机备份应用软件

iMazing是一款功能强大的苹果手机备份软件,它可通过备份功能将通讯录备份到电脑上,并在电脑端iMazing“通讯录”功能中随时查看和导出联系人信息。它自带Wi-Fi自动备份功能,能够保证通讯录备份数据是一直在动态更新的,防止手机中新…

webdriver.Chrome()没反应

今天学习爬虫安装selenium之后刚开始webdriver.Chrome()正常 后面运行突然卡在这一步了 百度发现是版本不匹配 我们下载旧版本的chrome Download Google Chrome 95.0.4638.69 for Windows - Filehippo.com 禁用chrome的自动更新 打开文件所在位置 点击Google文件夹 右键up…

HDLbits: Lemmings3

Lemmings又多了一种状态:dig,我按照上一篇文章里大神的思路又多加了两种状态:LEFT_DIGGING与RIGHT_DIGGING,写出了如下的代码: module top_module(input clk,input areset, // Freshly brainwashed Lemmings walk …

【Java 进阶篇】JavaScript 与 HTML 的结合方式

JavaScript是一种广泛应用于Web开发中的脚本语言,它与HTML(Hypertext Markup Language)结合使用,使开发人员能够创建交互式和动态的网页。在这篇博客中,我们将深入探讨JavaScript与HTML的结合方式,包括如何…

图像滤波总结

中值滤波器 中值滤波器是一种常用的非线性滤波器,其基本原理是:选择待处理像素的一个邻域中各像素值的中值来代替待处理的像素。主要功能使某像素的灰度值与周围领域内的像素比较接近,从而消除一些孤立的噪声点,所以中值滤波器能够…

超美!ChatGPT DALL-E 3已可用,另外GPT-4可上传图片进行问答

今天,在ChatGPT里使用DALL-E 3的功能终于上线了。以下是截图: 在GPT-4下加了一个菜单入口,名为 DALL-E 3,这也意味着ChatGPT免费账户暂时不能使用这个功能。 我们体验一下这个功能。 技术交流 建了技术交流群!想要进…