【数据库——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命令列界面 进行测试,方便查看过往数据:

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

2.1 借阅人表

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

  1. select * from borrower;
    INSERT INTO borrower VALUES(1000000000003,'李丽梅','女','教师',DEFAULT,DEFAULT,13125121059,'[email protected]',5,'123456');
    INSERT INTO borrower VALUES(1000000000003,'李丽梅','女','教师',DEFAULT,DEFAULT,13125121059,'[email protected]',5,'123456');
    select * from borrower;
    

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第2张图片
    :可见在借阅人表中可以执行插入数据操作,但是不允许重复插入,因为主键重复冲突了。

  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;
    

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第3张图片
    :可见借阅人表可以正常修改数据,这里只展示证件号和姓名修改,其他列修改类似,但是 不同 的是,其他列可以修改成有重复的值,而证件号这一列却不可以,原因还是 主键冲突,不能有两个及以上相同的证件号出现。

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

    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;
    

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第4张图片
    :这是因为在借阅信息表中有级联外键,父表(借阅人表)修改后,子表(借阅信息表)也跟着修改(只适用于主键)。

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

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第5张图片
    :可见借阅人表可以正常删除数据,而与其关联的借阅信息表中的数据本来是不会删除的,但是在我写的程序里面会删除(因为在删除前创建了触发器),此样例将在后面给出。

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;
    

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第6张图片
    :可见图书表可以正常插入数据,但是不能插入相同图书编号的数据,还是因为主键冲突。

  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;
    

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第7张图片
    在这里插入图片描述
    :可见图书表可以正常修改数据,这里只展示图书编号和书名的修改,其他列修改类似,但是不同的是,其他列可以修改成有重复的值,而图书编号这一列却不可以,原因同样是主键冲突。

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

    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;
    

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第8张图片
    :可见修改图书表的图书编号,借阅信息表的图书编号也相应发生改变,这是因为在借阅信息表中有 级联外键,父表(图书表)修改后,子表(借阅信息表)也跟着修改(只适用于主键)。

  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;
    

    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第9张图片
    :而在图书表中删除数据后,本来借阅信息表中相关的数据是不会删除的,但是我新建了图书表删除后的触发器,可以实现图书表删除数据后,与其关联的借阅信息表中相关的数据与同时删除,详见后面触发器样例演示。

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,'[email protected]',2,'123456'),
													 (1000000000001,'康卓','男','教师',0,1,13125168999,'[email protected]',5,'123456'),
													 (2020312011001,'Tony','男','本科生',1,1,13612288888,'[email protected]',5,'tony123456'),
													 (2021312011002,'森林','男','研究生',DEFAULT,DEFAULT,17765499263,'[email protected]',5,'senlin_jisuanji'),
													 (2019311010065,'Mary','女','本科生',0,1,15088198250,'[email protected]',5,'ajndj_6556asdhabd'),
													 (2018210210205,'张三','男','研究生',0,1,17766877652,'[email protected]',5,'fawaikuangtujiushiwo'),
													 (1000000000002,'许和雅','女','教师',1,1,18927763056,'[email protected]',5,'jkja_hjsbj5665_naAAA'),
													 (2022312011029,'冯红云','女','研究生',DEFAULT,DEFAULT,13908623506,'[email protected]',5,'bsadhj32e_5SAS53'),
													 (2023302010007,'刘一凡','男','本科生',DEFAULT,DEFAULT,13702345067,'[email protected]',5,'66666666'),
													 (2022312011047,'张海','男','本科生',1,1,18985107123,'[email protected]',5,'88888888'),
													 (2020301110066,'雷淳雅','女','研究生',1,1,13707761223,'[email protected]',5,'ajck6515a_cj'),
													 (2023513266556,'郭靖','男','本科生',1,1,17725108427,'[email protected]',5,'woaihuangrong'),
													 (2023513266557,'黄蓉','女','本科生',DEFAULT,DEFAULT,17715108427,'[email protected]',5,'woaiguojing'),
													 (2022202365655,'张三丰','男','研究生',DEFAULT,DEFAULT,17715156632,'[email protected]',5,'ilikecomputer'),
													 (2019301021002,'陈启','女','本科生',1,1,13521234567,'[email protected]',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. 可以在可视化界面视图中双击查看数据:
    【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第10张图片

  2. 利用代码查看:

    SELECT * FROM overdue_view;
    

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

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

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

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

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;

测试结果如下:

【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程_第13张图片
可见存储过程能够正常向借阅信息表插入数据。

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)】(2)图书借阅系统——数据库测试、视图以及存储过程_第14张图片
可见归还图书后,借阅信息表的已还日期得到更新,归还日期为当天日期,修改成功!

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

你可能感兴趣的:(数据库——MySQL,数据库,mysql)