【MySql】实验十六 综合练习:图书管理系统数据库结构

文章目录

  • 创建图书管理系统数据库结构
    • 一、创建数据表
      • 1.1 book表
      • 1.2 reader表
      • 1.3 borrow表
    • 二、插入示例数据
      • 2.1 向book表插入数据
      • 2.2 向reader表插入数据
      • 2.3 向borrow表插入数据
    • 三、查询操作
      • 3.1 根据语义为借书表borrow的bno列和 rno列建立外键
      • 3.2 查询张小海编写的“数据库原理”的出版日期。
      • 3.3 查询“操作系统”的所有借书记录。
      • 3.4 查询图书表的所有记录,按出版社和出版日期排序。
      • 3.5 查询每个读者借书的次数。
      • 3.6 查询没有被任何人借过的图书的图书编号、图书名称、作者。
    • 四、视图和索引
      • 4.1 建立视图bookview
      • 4.2 在图书表 book 的出版日期列上建立索引
      • 4.2 继承book创建tbook表信息插入
      • 4.3 删除tbook表
    • 五、存储过程和触发器
      • 5.1 创建存储过程bookproc
      • 5.2 执行存储过程bookproc
      • 5.3 创建触发器newtrigger
    • 六、自定义函数
      • 6.1 创建自定义函数borrowcount
    • 七、数据库备份
      • 7.1 备份数据库


创建图书管理系统数据库结构

在本篇博客中,我们将一步步创建一个简单的图书管理系统数据库。我们将定义三个主要的数据表:book(图书信息)、reader(读者信息)和borrow(借书记录)。下面是每个表的详细结构。

一、创建数据表

1.1 book表

存储图书信息的表。

列名数据类型是否可为空主键
bnoachar(4)
bnamechar(20)
authorchar(10)
publishchar(20)
pubdatedatetime
-- 创建book表
CREATE TABLE book(
    bnoa char(4) NOT NULL PRIMARY KEY,  -- 图书编号,主键,不允许为空
    bname char(20) NOT NULL,             -- 图书名称,不允许为空
    author char(10) NOT NULL,            -- 作者,不允许为空
    publish char(20) NOT NULL,           -- 出版社,不允许为空
    pubdate datetime NOT NULL            -- 出版日期,不允许为空
);

1.2 reader表

存储读者信息的表。

列名数据类型是否可为空主键
rnochar(4)
rnamechar(10)
-- 创建reader表
CREATE TABLE reader(
    rno char(4) NOT NULL PRIMARY KEY,  -- 读者编号,主键,不允许为空
    rname char(10) NOT NULL             -- 读者姓名,不允许为空
);

1.3 borrow表

存储借书记录的表。

列名数据类型是否可为空主键
borrownoint
bnochar(4)
rnochar(4)
borrowdatedatetime
-- 创建borrow表
CREATE TABLE borrow(
    borrowno int PRIMARY KEY,           -- 借书记录编号,主键,不允许为空
    bno char(4),                        -- 图书编号,可以为空
    rno char(4),                        -- 读者编号,可以为空
    borrowdate datetime                 -- 借书日期,可以为空
);

二、插入示例数据

2.1 向book表插入数据

-- 向book表插入数据
INSERT into book(bnoa,bname,author,publish,pubdate)
VALUES 
(0001,"数据库原理","张小海","人民邮电出版社","2020-10-01"),
(0002,"软件工程","李莎莎","高等教育出版社","2020-08-09"),
(0003,"操作系统","钱东升","人民邮电出版社","2021-03-06"),
(0004,"数据结构","鲁明浩","清华大学出版社","2021-05-28"),
(0005,"编译原理","张悦","高等教育出版社","2021-10-30");

2.2 向reader表插入数据

-- 向reader表插入数据
insert into reader(rno,rname)
VALUES
("0001","全志忠"),
("0002","孙佳佳"),
("0003","司马精");

2.3 向borrow表插入数据

-- 向borrow表插入数据
insert into borrow
VALUES
("1","0001","0001","2021-11-15"),
("2","0002","0001","2021-11-20"),
("3","0002","0002","2021-11-30"),
("4","0003","0002","2021-12-05"),
("5","0003","0001","2021-12-12"),
("6","0004","0001","2021-12-21");

三、查询操作

3.1 根据语义为借书表borrow的bno列和 rno列建立外键

alter table borrow add FOREIGN KEY (bno)  REFERENCES book(bnoa); 
alter table borrow add FOREIGN KEY (rno)  REFERENCES reader(rno);

3.2 查询张小海编写的“数据库原理”的出版日期。

-- 查询张小海编写的“数据库原理”的出版日期
select pubdate
FROM book
where author="张小海" AND bname="数据库原理";

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

3.3 查询“操作系统”的所有借书记录。

-- 查询“操作系统”的所有借书记录
select *
from book b,borrow bo,reader r
where b.bnoa=bo.bno and bo.rno=r.rno
and b.bname="操作系统";

在这里插入图片描述

3.4 查询图书表的所有记录,按出版社和出版日期排序。

查询图书表的所有记录,查询结果按出版社和出版日期排序,出版社的排序条件为降序,出版日期的排序条件为升序。

-- 查询图书表的所有记录,按出版社和出版日期排序
SELECT *
FROM book
ORDER BY publish DESC, pubdate ASC;

在这里插入图片描述

3.5 查询每个读者借书的次数。

查询每个读者借书的次数,查询结果由“读者编号”和“借书次数”两列组成。

-- 查询每个读者借书的次数
select r.rno as "读者编号",COUNT(bw.borrowno) as "借书次数"
FROM reader r
left join borrow bw on r.rno=bw.rno
GROUP BY r.rno;

在这里插入图片描述

3.6 查询没有被任何人借过的图书的图书编号、图书名称、作者。

-- 查询没有被任何人借过的图书的图书编号、图书名称、作者
select b.bnoa,b.bname,b.author
from book b
LEFT JOIN borrow bw on b.bnoa =bw.bno
where bw.bno is NULL;

在这里插入图片描述

四、视图和索引

4.1 建立视图bookview

建立新的名为bookview的视图,该视图检索“人民邮电出版社”出版的所有图书的图书名称、作者和出版日期。

-- 建立视图bookview
CREATE VIEW bookview as
select bname,author,pubdate
FROM book
where publish="人民邮电出版社";

在这里插入图片描述

4.2 在图书表 book 的出版日期列上建立索引

在图书表 book 的出版日期列上建立名为pubdatcindex的普通索引,要求该索引采取降序排列。

-- 在图书表 book 的出版日期列上建立索引
CREATE INDEX pubdatcindex ON book (pubdate DESC);

4.2 继承book创建tbook表信息插入

建立新的名为tbook 的表,该表的结构与 book表完全一样,利用一个INSERT语句将“人民邮电出版社”出版的所有图书信息插人入book表中。

-- 建立tbook表格 继承 book
CREATE table tbook like book;

在这里插入图片描述

  • 将“人民邮电出版社”出版的所有图书信息插人tbook表中。
INSERT INTO tbook
SELECT *
FROM book
WHERE publish = '人民邮电出版社';

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

4.3 删除tbook表

12)删除第(11)步建立的表tbook。

DROP TABLE tbook;

五、存储过程和触发器

5.1 创建存储过程bookproc

创建拥有一个参数的bookproc()存储过程,用来查询图书表中由该参数指定作者的所有图书的图书名称、出版社和出版日期,然后执行该存储过程,并将输入参数赋值“张小海”。

-- 创建存储过程bookproc
DELIMITER //
CREATE PROCEDURE bookproc(IN authorName char(10))
BEGIN
    SELECT bname, publish, pubdate
    FROM book
    WHERE author = authorName;
END //
DELIMITER ;

在这里插入图片描述

5.2 执行存储过程bookproc

-- 执行存储过程bookproc
CALL bookproc("张小海");

在这里插入图片描述

5.3 创建触发器newtrigger

建立名为newtrigger的触发器,触发器规定,当删除读者表中的一条记录时将借书表中相应读者的借书记录一并删除,然后删除读者表中的一条记录以触发触发器。

-- 创建触发器newtrigger
DELIMITER //
CREATE TRIGGER newtrigger AFTER DELETE ON reader
FOR EACH ROW
BEGIN
    DELETE FROM borrow WHERE rno = OLD.rno;
END //
DELIMITER ;

在这里插入图片描述

六、自定义函数

6.1 创建自定义函数borrowcount

建立borrowcount(自定义函数,该函数用于输人读者的编号以返回该读者的借书次数,如果编号不存在则返回-1。

-- 创建自定义函数borrowcount
DELIMITER //
CREATE FUNCTION borrowcount(rno char(4))
RETURNS int
BEGIN
    DECLARE borrowCount int;
    SELECT COUNT(*) INTO borrowCount FROM borrow WHERE rno = rno;
    IF borrowCount IS NULL THEN
        SET borrowCount = -1;
    END IF;
    RETURN borrowCount;
END //
DELIMITER ;

在这里插入图片描述

七、数据库备份

7.1 备份数据库

-- 备份数据库
mysqldump -u username -p Book > D:/bookbackup.sql

请注意,以上备份命令需要在MySQL命令行中执行,并且您需要将username替换为您的MySQL用户名。此命令会将整个Book数据库备份到D盘根目录下的bookbackup.sql文件中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制

目录 通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制 一、引言 二、语义搜索与 MongoDB Atlas 的背景 三、MongoDB Atlas 的向量搜索功能 1. 向量搜索的实现方式 2. 典型操作示例 四、RAG 在 MongoDB Atlas 的应用 1、RAG是什么 2、RAG 的实现过程 3、RA…

51单片机基础01 单片机最小系统

目录 一、什么是51单片机 二、51单片机的引脚介绍 1、VCC GND 2、XTAL1 2 3、RST 4、EA 5、PSEN 6、ALE 7、RXD、TXD 8、INT0、INT1 9、T0、T1 10、MOSI、MISO、SCK 11、WR、RD 12、通用IO P0 13、通用IO P1 14、通用IO P2 三、51单片机的最小系统 1、供电与…

【原创】如何备份和还原Ubuntu系统,非常详细!!

前言 我在虚拟机装了一个xfce4的Ubuntu桌面版,外加输入法、IDEA等,我想将这个虚拟机里的系统直接搬到物理机中,那我可以省的再重新装一遍、配置xfce4桌面、修改一堆快捷键还有配置idea了,那直接说干就干。 本教程基于Ubuntu24.0…

萤石设备视频接入平台EasyCVR私有化视频平台视频监控系统的需求及不同场景摄像机的选择

在现代社会,随着安全意识的提高和技术的进步,安防监控视频系统已成为保障人们生活和财产安全的重要工具。EasyCVR安防监控视频系统,以其先进的网络传输技术和强大的功能,为各种规模的项目提供了一个高效、可靠的监控解决方案。以下…

基于yolov8、yolov5的行人检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:行人检测在交通管理、智能监控和公共安全中起着至关重要的作用,不仅能帮助相关部门实时监控人群动态,还为自动化监控系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的行人检测模型,该模型使用了…

Django5 2024全栈开发指南(二):Django项目配置详解

目录 一、基本配置信息二、资源文件配置2.1 资源路由——STATIC_URL2.2 资源集合——STATICFILES_DIRS2.3 资源部署——STATIC_ROOT2.2.4 媒体资源——MEDIA 三、模板配置四、数据库配置4.1 mysqlclient连接MySQL4.2 pymysql连接MySQL4.3 多个数据库的连接方式4.4 使用配置文件…

2、 家庭网络发展现状

上一篇我们讲了了解家庭网络历史(https://blog.csdn.net/xld_hung/article/details/143639618?spm1001.2014.3001.5502),感兴趣的同学可以看对应的文章,本章我们主要讲家庭网络发展现状。 关于家庭网络发展现状,我们会从国内大户型和小户型的网络说起&…

一文速学---红黑树

文章目录 一、红黑树简介二、 红黑树特性三、红黑树插入3.1 红黑树为空3.2 父节点为黑色3.3 父节点为红色3.3.1 父亲和叔叔都是红色3.3.2 父节点为红色,叔叔节点为黑色3.3.2.1 父节点在左节点,插入节点在父亲左节点3.3.2.2 父节点在左节点,插…

学习日记_20241117_聚类方法(高斯混合模型)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

ISP——你可以从这里起步(二)

接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把…

shell bash---类似数组类型

0 Preface/Foreword C/C,Python,Java等编程语言,都含有数组类型,那么shell脚本是不是也有类似的语法呢? 1 类似数组类型 1.1 ()类似数组类型 #! /bin/bashecho "Welcome to bash world!" anim…

QT中使用图表之QChart绘制面积图

绘制面积图,则系列选择面积系列QAreaSeries 需要给系列设置上折线和下折线(QLineSeries),如果没有设置下折线,则默认x轴为下折线 1、创建图表视图 //1、创建图表视图 QChartView * view new QChartView(this); //开…

H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因

EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方…

第02章 CentOS基本操作

2.文件基本操作【文件操作(一)】 目标 理解Linux下路径的表示方法能够使用命令(mkdir和touch)在指定位置创建目录和文件能够使用命令(rm)删除指定的目录和文件能够使用命令(ls)列出目录里的文件能够使用命令(cat,head,tail,less,more)查看文件内容理解标…

案例精选 | 某知名教育集团基于安全运营平台的全域威胁溯源实践

某知名教育集团成立于1999年,总部位于北京海淀中关村。集团专注于K-12基础教育,构建了从幼儿园到高中的全面教育体系,涵盖学校管理、教学科研、师资培训、信息化服务等多个方面。集团在全国范围内设有15所小学、12所初中、9所高中、6个国际部…

Java-01 深入浅出 MyBatis - MyBatis 概念 ORM映射关系 常见ORM 详细发展历史

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

nodejs和npm在gitbash中提示Not Found情况的解决办法

很多小伙伴学习了node以后,在cmd命令行中可以正常的获取node版本和npm版本,但是我们经常使用gitbash来管理git,这时候下载完gitbash后,在gitbash中输入node -v和npm -v会提示Not Found。这种情况如何处理??…

Linux:调试器-gdb/cgdb

文章目录 一、编译成debug1、-g 选项 二、gdb调试命令1、在CentOS系统下检查安装gdb2、进入gdb模式3、quit 退出gdb4、list (简写 l)显示文件内容5、b 打断点6、 r / run运行程序7、c 让程序直接运行完 三、cgdb1、info b查看打的所有断点2、d 删除断点3…

数据结构 -- 二叉搜索树

二叉搜索树 概念 二叉搜索树又称为二叉排序树,它或为空树,或为具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于等于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于等于根节…

VScode使用Batch Runner插件在终端运行bat文件

搜索并安装插件Batch Runner 创建测试文件 echo off echo "Hello world"按F5运行