【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))
BEGINSELECT bname, publish, pubdateFROM bookWHERE 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
BEGINDELETE FROM borrow WHERE rno = OLD.rno;
END //
DELIMITER ;

在这里插入图片描述

六、自定义函数

6.1 创建自定义函数borrowcount

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

-- 创建自定义函数borrowcount
DELIMITER //
CREATE FUNCTION borrowcount(rno char(4))
RETURNS int
BEGINDECLARE borrowCount int;SELECT COUNT(*) INTO borrowCount FROM borrow WHERE rno = rno;IF borrowCount IS NULL THENSET 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文件中。

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

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

相关文章

QT QLabel双击事件

新建类&#xff1a; DoubleClickLabel .h #pragma once#include <QLabel>class DoubleClickLabel : public QLabel {Q_OBJECTpublic:DoubleClickLabel(QWidget *parent);~DoubleClickLabel(); signals:void doubleClicked();protected: //这里重写双击事件virtual v…

Vue3中实现插槽使用

目录 一、前言 二、插槽类型 三、示例 四、插槽的分类实现 1. 基本插槽 2. 命名插槽 3. 默认插槽内容 4. 作用域插槽&#xff08;Scoped Slots&#xff09; 5. 多插槽与具名插槽组合 一、前言 在 Vue 3 中&#xff0c;插槽&#xff08;Slot&#xff09;用于实现组件的内…

【学习笔记】科学计算

[pytorch 加速] CPU传输 & GPU计算的并行&#xff08;pin_memory&#xff0c;non_blocking&#xff09; https://www.bilibili.com/video/BV15Xxve1EtZ from IPython.display import Image import os os.environ[http_proxy] http://127.0.0.1:7890 os.environ[https_pr…

2、计算机网络七层封包和解包的过程

计算机网络osi七层模型 1、网络模型总体预览2、数据链路层4、传输层5.应用层 1、网络模型总体预览 图片均来源B站&#xff1a;网络安全收藏家&#xff0c;没有本人作图 2、数据链路层 案例描述&#xff1a;主机A发出一条信息&#xff0c;到路由器A&#xff0c;这里封装目标MAC…

在云服务器搭建 Docker

操作场景 本文档介绍如何在腾讯云云服务器上搭建和使用 Docker。本文适用于熟悉 Linux 操作系统&#xff0c;刚开始使用腾讯云云服务器的开发者。如需了解更多关于 Docker 相关信息&#xff0c;请参见 Docker 官方。 说明&#xff1a; Windows Subsystem for Linux&#xff…

Isaac Sim+SKRL机器人并行强化学习

目录 Isaac Sim介绍 OmniIssacGymEnvs安装 SKRL安装与测试 基于UR5的机械臂Reach强化学习测评 机器人控制 OMNI GYM环境编写 SKRL运行文件 训练结果与速度对比 结果分析 运行体验与建议 Isaac Sim介绍 Isaac Sim是英伟达出的一款机器人仿真平台&#xff0c;适用于做机…

【时间之外】IT人求职和创业应知【37】-AIGC私有化

目录 新闻一&#xff1a;2024智媒体50人成都会议暨每经20周年财经媒体峰会召开 新闻二&#xff1a;全球机器学习技术大会在北京召开 新闻三&#xff1a;区块链技术在金融领域的应用取得新突破 不知不觉的坚持了1个月&#xff0c;按照心理学概念&#xff0c;还要坚持2个月&am…

亿咖通科技应邀出席微软汽车行业智享会,分享ECARX AutoGPT全新实践

11月14日&#xff0c;全球出行科技企业亿咖通科技&#xff08;纳斯达克股票代码&#xff1a;ECX&#xff09;应邀于广州参加由微软举行的汽车行业智享会&#xff0c;揭晓了亿咖通科技对“AI定义汽车”时代的洞察与技术布局&#xff0c;分享了亿咖通科技汽车垂直领域大模型ECARX…

三维测量与建模笔记 - 点特征提取 - 4.3 Harris特征点

在3D重建应用中&#xff0c;很重要的一个场景是找到两幅图像中的同名特征点&#xff0c;这个过程需要对特征点进行提取和描述。 从上面描述可以看出&#xff0c;如果窗口处于颜色变化不明显或者没有变化的区域&#xff0c;E的值很小或为0&#xff1b;如果窗口处于边缘位置&…

C指针之舞——指针探秘之旅

❤博客主页&#xff1a;折枝寄北-CSDN博客 ❤专栏内容&#xff1a;C语言学习专栏https://blog.csdn.net/2303_80170533/category_12794764.html?spm1001.2014.3001.5482 指针基础学习 在之前的博客文章中&#xff0c;简单总结了指针的基础概念 我们知道了指针的概念&#xf…

[Qt platform plugin问题] Could not load the Qt platform plugin “xcb“

Qt platform plugin 是 Qt 应用程序启动时加载的插件。不同的平台有不同的插件。 常见的插件有:linuxfb Wayland xcb 简单来说就是启动一个GUI程序, 离不开这些插件.选择其中一个就好 出现这个问题要么就是没有插件&#xff0c;要么就是插件依赖的库没有。 要么就是插件选则的…

Skywalking搭建-来自于图灵课堂

Skywalking主要用于链路追踪&#xff0c;日志收集查看&#xff0c;异常日志查看&#xff0c;服务监控弱一些&#xff0c;服务器监控可以使用prometheus 一、搭建服务端&#xff0c;使用startup.bat启动 配置持久化&#xff0c;如果是用mysql持久化&#xff0c;拷贝mysql链接包…

Relaxcert SSL证书申请与自动续签之IIS

Relaxcert SSL证书申请与自动续签之IIS 1.下载安装自动续签程序2.配置客户端秘钥3.HTTP站点升级HTTPS4.关于SSL自动续签 Relaxcert SSL证书申请与自动续签工具 控制台地址 https://cert.relaxcert.com 文档地址 https://doc.relaxcert.com 1.下载安装自动续签程序 登录控制台…

spi 回环

///tx 极性0 &#xff08;sclk信号线空闲时为低电平&#xff09; /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

IDEA旗舰版编辑器器快速⼊门(笔记)

简介&#xff1a;javaweb开发必备软件之IDEA期间版介绍 DEA编辑器器版本介绍 官⽹网&#xff1a;https://www.jetbrains.com/地址&#xff1a;https://www.jetbrains.com/idea/download/#sectionmac DEA 分社区版(Community) 和 旗舰版(Ultimate)&#xff0c;我们做JavaWeb开…

WPF的基础控件详解

WPF的基础控件详解 在WPF学习中 基本控件是最简单也是最基础的东西。也是很初学者容易忽略的 本此笔记教程主要针对WPF中基础控件使用和应用进行手把手教学&#xff0c;如果学习了此笔记对你有帮助记得一键三连哦~~~~ TextBlock 基本用法 长字串处理 LineBreak标籤在指定的地…

MySQL的聚簇索引和二级索引

索引按照物理实现方式&#xff0c;索引可以分为 2 种&#xff1a;聚簇&#xff08;聚集&#xff09;和非聚簇&#xff08;非聚集&#xff09;索引。也可以把非聚集索引称为二级索引或者辅助索引。 一.聚簇索引 聚簇索引并不是一种单独的索引类型&#xff0c;而是一种数据存储方…

2.5D视觉——Aruco码定位检测

目录 1.什么是Aruco标记2.Aruco码解码说明2.1 Original ArUco2.2 预设的二维码字典2.3 大小Aruco二维码叠加 3.函数说明3.1 cv::aruco::detectMarkers3.2 cv::solvePnP 4.代码注解4.1 Landmark图说明4.2 算法源码注解 1.什么是Aruco标记 ArUco标记最初由S.Garrido-Jurado等人在…

能源革命持续发力,华普微隔离器助力储能行业“向绿向新”

能源是工业的粮食&#xff0c;是国民经济的命脉&#xff0c;亦是实现可持续发展的关键之处。在各国“双碳”目标战略的引领下&#xff0c;能源革命正全面席卷而来&#xff0c;而加速培育能源新质生产力&#xff0c;构建清洁低碳、安全高效的新型能源体系&#xff0c;已成为全球…

微信小程序-prettier 格式化

一.安装prettier插件 二.配置开发者工具的设置 配置如下代码在setting.json里&#xff1a; "editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml"…