数据库 | MySQL实验报告
数据库 | MySQL实验报告
Prong921107810XXX prong
数据库实验报告
[toc]
【第一堂】安装
安装过程确实一波三折,安装版本不同,然后第一次安装又没有完全弄完,导致的bug就是再进行安装时无法完成,启动mySQL失败。查找了新教程完美解决安装和环境配置
2023 年 MySQL 8.0 安装配置 最简易(保姆级)
卸载MySQL
MySQL安装 starting the server失败的解决办法
下载安装
基本没有问题,注意选用custom安装,安装需要的MySQL Server 8.0.33 - X^64$
即可。安装路径选择D盘,便于后续添加功能
注意命名时可改为MySQL,方便后续使用。
环境变量配置
复制MySQL
的bin
目录,添加到系统变量Path目录内即可
验证安装
管理员身份运行终端,输入mysql -uroot -p
,再输入密码,
启动 MySQL 自带命令行,启动图形化界面均正常。
基本操作
查看数据库
创建数据库
创建表,显示表结构
修改字段数据类型
修改字段名
增加字段
删除字段
修改字段排列
删除表
相关代码
1 | -- 查看当前系统中有什么数据库 |
【第二、三堂】电子产品数据库
题目要求
下面的练习基于一个正在运行的关系数据库。该数据库模式由四个关系组成,它们的模式如下:
Product(maker,model, type)
PC(model,speed,ram, hd, price)
Laptop(model, speed, ram, hd, screen, price)
Printer(model, color, type, price)
关系Product给出了各种产品的制造商、型号和产品类型 (PC、laptop或者printer)。为了简单起见,假设型号对于所有的制造商和产品都是唯一的,尽这个假设在实际中不成立,实际的数据库中型号将包含一个代表制造商的代码。关系PC给出了每PC的速度 (处理器,以千兆赫兹为单位)、RAM的大小 (以MB为单位)、硬盘容量 (以GB为单位以及价格。关系Laptop与关系PC类似,它在PC的基础上增加了属性screen,即屏幕的尺寸(以寸为单位)。关系Printer记录了每种类型的打印机的型号,是否为彩色打印机 (如果是彩色,则true)、处理类型(激光或者喷墨打印)以及价格。
请写出下面的定义:
a) 合适的Product关系模式。
b) 合适的PC关系模式。
c) 合适的Laptop关系模式。
d) 合适的Printer关系模式。
e) 从(d)的关系模式中删除属性color。
f) 为©得到的模式增加一个属性od (光驱类型,比如CD、DVD)。如果某个笔记本电脑 (laptop)没有光驱,则该属性的默认值为“none’。
关系模式
a) Product关系模式是:
Product(maker: string, model: string, type: string)
其中,maker是产品的制造商,model是产品的型号,type是产品的类型(PC、laptop或者printer)。model是主键,因为它在所有的制造商和产品中都是唯一的。
b) PC关系模式是:
PC(model: string, speed: float, ram: int, hd: float, price: float)
其中,model是PC的型号,speed是PC的处理器速度(以千兆赫兹为单位),ram是PC的内存大小(以MB为单位),hd是PC的硬盘容量(以GB为单位),price是PC的价格。model是主键,也是Product关系的外键,因为它引用了Product关系中的model属性。
c) Laptop关系模式是:
Laptop(model: string, speed: float, ram: int, hd: float, screen: float, price: float)
其中,model是笔记本电脑的型号,speed是笔记本电脑的处理器速度(以千兆赫兹为单位),ram是笔记本电脑的内存大小(以MB为单位),hd是笔记本电脑的硬盘容量(以GB为单位),screen是笔记本电脑的屏幕尺寸(以寸为单位),price是笔记本电脑的价格。model是主键,也是Product关系的外键,因为它引用了Product关系中的model属性。
d) 合适的Printer关系模式是:
Printer(model: string, color: boolean, type: string, price: float)
其中,model是打印机的型号,color是打印机是否为彩色打印机(如果是彩色,则true),type是打印机的处理类型(激光或者喷墨打印),price是打印机的价格。model是主键,也是Product关系的外键,因为它引用了Product关系中的model属性。
e) 从(d)的关系模式中删除属性color,得到的关系模式是:
Printer(model: string, type: string, price: float)
其中,model是打印机的型号,type是打印机的处理类型(激光或者喷墨打印),price是打印机的价格。model是主键,也是Product关系的外键,因为它引用了Product关系中的model属性。
f) 为©得到的模式增加一个属性od (光驱类型,比如CD、DVD),得到的关系模式是:
Laptop(model: string, speed: float, ram: int, hd: float, screen: float, price: float, od: string)
其中,model是笔记本电脑的型号,speed是笔记本电脑的处理器速度(以千兆赫兹为单位),ram是笔记本电脑的内存大小(以MB为单位),hd是笔记本电脑的硬盘容量(以GB为单位),screen是笔记本电脑的屏幕尺寸(以寸为单位),price是笔记本电脑的价格,od是笔记本电脑的光驱类型(比如CD、DVD)。如果某个笔记本电脑没有光驱,则该属性的默认值为“none”。model是主键,也是Product关系的外键,因为它引用了Product关系中的model属性。
数据库设计
我选择了Product和Laptop两个表,因为它们包含了不同类型的电子产品的信息。接下来是关于创建数据库、创建表、填充数据、做出查询的相关操作的代码和操作截图。
1.数据库的创建
分别创建Product、Laptop 两张表
2.常用的表操作
查询
创建表
填充表,观察表结构:是用不同方式,例如
- 文件导入
- 多行同时导入
- 特定字段导入
- …
直接添加
从文件导入
所有字段增加记录
将查询结果插入到表中
从文件中导入表数据可能会遇到问题,问题如下:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
这是因为mySQL的权限设置问题,输入SHOW VARIABLES LIKE "secure_file_priv";
可以找到默认的安全导入导出路径secure-file-priv
。一般来说,把你需要导入的文件放进去即可。但把其他东西放进去的同时,会导致drop database ebase
删除数据库失败。一个可行的办法是:打开mySQL的my.ini
文件,找到其中的secure-file-priv
设置,修改为secure-file-priv=
就可以。
- printer.txt中的布尔数据需要转换。
由于mySQL中没有布尔类型,所以我的数据库里使用的是tinyint(1)
来替代。因此当导入printer.txt
文件中的数据,遇到此类型的数据,需要把true
和false
全部转换成1
和0
,否则就会被识别为字符无法导入。
printer.txt
内字符串不需要打引号。- 导入文件使用绝对路径
LOAD DATA INFILE 'D:/printer.txt' INTO TABLE Printer FIELDS TERMINATED BY ', ';
其中的斜杆使用/
。
修改表结构
修改字段数据类型:将price字段的数据类型从FLOAT改为DECIMAL(10,2)
修改字段名:将color字段的名字改为is_color
增加字段:在表的末尾增加一个字段rating,表示打印机的评分,数据类型为INT
删除字段:从表中删除type字段
增加字段:在表的开头增加一个字段id,表示打印机的编号,数据类型为INT
修改字段排列位置:将rating字段移动到is_color字段之后
删除表
使用.sql
命令:导入.sql命令,假设有一个名为ebase.sql的文件,包含了创建数据库、填入数据等操作的代码
3.完整代码
1 | -- 创建EBASE数据库 |
【第四堂、第五堂】基于课本数据的电子产品数据库
该数据库模式由四个关系组成,这四个关系的模式如下:
Product(maker, model, type)
PC(model, speed, ram, hd, price)
Laptop(model,speed, ram, hd, screen, price)
Printer(model, color, type, price)
选择使用 product
和 pc
建立数据库
建立数据库
创建数据EPBASE数据库
创建相关表
输入数据,其中
product的数据如下:
1 | A,1001,pc |
pc的数据如下:
1 | 1001,2.66,1024,250,2114 |
表的数据更新
将PC表中model为1001的price更新为1999
表的数据插入
向laptop直接插入product的model没有的数据时会失败,因为存在外键约束
避免laptop插入数据时被外键约束,先在product里插入一条新纪录,model为2011,maker为G,type为laptop
在Laptop表中插入一条新的记录,model为2011,speed为2.5,ram为4096,hd为500,screen为15.6,price为1299
表的数据删除
从Laptop表中删除model为2011的记录
列出表的所有字段
列出Product表的所有字段
列出表的某些字段
列出PC表的model,speed和price字段
查询指定记录
查询Product表中maker为A的记录
带BETWEEN AND的范围查询
查询pc表中speed在2.5和3之间的记录
带LIKE的字符匹配查询
查询Product表中type以p开头的记录
查询空值
查询Printer表中price为空的记录,结果是空
带AND的多条件查询
查询PC表中speed大于2.5且ram小于1024的记录
带OR的多条件查询
查询PC表中speed等于2.00或2.20的记录
查询结果不重复
查询Product表中不重复的maker
排序
查询PC表中的所有记录,并按price降序排序
GROUP BY with 聚集函数
查询Product表中每种type的数量
HAVING
查询Product表中每种type的数量,并只显示数量大于5的记录
使用到五个聚集函数的查询
查询PC表中speed的最大值,最小值,平均值,总和和数量
基于内连接的多表查询
查询Product表和PC表的内连接,显示maker,model,speed和price
基于左外连接的多表查询
查询Product表和Laptop表的左外连接,显示maker,model,speed和price
基于右外连接的多表查询
查询Product表和pc表的右外连接,显示maker,model,ram和price
子查询
查询PC表中price高于平均price的记录
完整代码
1 | -- 创建EPBASE数据库 |
【第六堂】基于电子数据库的查询
6.1.3
题目
基于习题2.4.1给出的数据库模式和数据写出后面的查询语句以及查询结果。
Product(maker, model, type)
PC(model,speed,ram, hd, price)
Laptop(model, speed, ram, hd, screen, price)
Printer(model color, type, price)
结果
a) 找出所有价格低于$1000的个人计算机的型号、速度和硬盘大小
b) 要求同(a),但要将列speed重命名为gigahertz,并将列hd重命名为gigabytes
c) 找出所有打印机制造厂商。
d) 找出价格高于$1500的笔记本电脑的型号、内存大小和屏幕尺寸。
e)找出关系Printer中所有彩色打印机元组。注意属性color是一个布尔类型。
f) 找出速度为3.2且价格低于$2000的个人计算机的型号和硬盘大小。
完整代码
1 | -- a) 找出所有价格低于$1000的个人计算机的型号、速度和硬盘大小 |
6.2.2
题目
根据习题2.4.1的数据库模式和数据写出下面的查询,并求出查询结果。
PC(model, speed, ram, hd, price)
Laptop(model, speed, ram, hd, screen, price)
Printer(model, color, type, price)
a) 查询硬盘容量至少30G的笔记本电脑制造商及该电脑的速度
b) 查询制造商B生产的任意类型的所有产品的型号和价格。
c)查询只卖笔记本电脑不卖PC的厂商。
d)查询出现在两种或两种以 上PC中的硬盘的大小。
e)查询每对具有相同速度和RAM的PC的型号。每一对只能列出一次,例如,若 (i,j) 已被列出则 (i.i) 就不能再被列出。
f)查询生产至少两种速度至少为3.0的电脑 (PC或笔记本电脑) 的厂商。
结果
a) 查询硬盘容量至少30G的笔记本电脑制造商及该电脑的速度
b) 查询制造商B生产的任意类型的所有产品的型号和价格。
c)查询只卖笔记本电脑不卖PC的厂商。
d)查询出现在两种或两种以 上PC中的硬盘的大小。
e)查询每对具有相同速度和RAM的PC的型号。每一对只能列出一次,例如,若 (i,j) 已被列出则 (i.i) 就不能再被列出。
f)查询生产至少两种速度至少为3.0的电脑 (PC或笔记本电脑) 的厂商。
完整代码
1 | -- a) 查询硬盘容量至少30G的笔记本电脑制造商及该电脑的速度 |
6.3.1
题目
基于习题2.4.1的数据库模式写出后面的查询。
Product(maker, model, type)
PC(model, speed, ram, hd, price)Laptop(model, speed, ram, hd, screen, price)
Printer(model, color, type, price)
每题的答案应当至少使用一个子查询,并且要求使用两种不同的方法写出每个查询(例如,使用不同运算符EXISTS、IN、ALL和ANY)。
a)找出速度在3.0以上的PC制造商。
b) 找出价格最高的打印机。
c) 找出速度比任何一台PC都慢的笔记本电脑。
d)找出价格最高的产品 (PC、笔记本电脑或打印机)的型号
!e) 找出价格最低的彩色打印机的制造商。
!!f)找出RAM容量最小而PC中速度最快者的制造商。
结果
a)找出速度在3.0以上的PC制造商。
b) 找出价格最高的打印机。
c) 找出速度比任何一台PC都慢的笔记本电脑。
d)找出价格最高的产品 (PC、笔记本电脑或打印机)的型号
!e) 找出价格最低的彩色打印机的制造商。
!!f)找出RAM容量最小而PC中速度最快者的制造商。
完整代码
1 | -- a)找出速度在3.0以上的PC制造商。 |
6.4.6
题目
a) 查询PC的平均速度。
b) 查询价格高于$1000的笔记本电脑的平均速度。
c) 查询厂商“A”生产的PC的平均价格。
d)查询厂商“D”生产的PC和笔记本电脑的平均价格。
e) 查询每种不同速度的PC的平均价格。
! f) 查询每家厂商生产的笔记本电脑的屏幕尺寸的平均值。
!g) 查询至少生产三种不同型号PC的制造商。
! h) 查询每个销售PC的广商的PC的最高价格。
!i) 查询每种高于2.0速度的PC的平均价格。
!!) 查询所有生产打印机的厂商生产的PC的硬盘容量的平均大小。
结果
a) 查询PC的平均速度。
b) 查询价格高于$1000的笔记本电脑的平均速度。
c) 查询厂商“A”生产的PC的平均价格。
d)查询厂商“D”生产的PC和笔记本电脑的平均价格。
e) 查询每种不同速度的PC的平均价格。
! f) 查询每家厂商生产的笔记本电脑的屏幕尺寸的平均值。
!g) 查询至少生产三种不同型号PC的制造商。
! h) 查询每个销售PC的广商的PC的最高价格。
!i) 查询每种高于2.0速度的PC的平均价格。
!j) 查询所有生产打印机的厂商生产的PC的硬盘容量的平均大小。
完整代码
1 | -- a) 查询PC的平均速度。 |
【第七堂】数据库设计
自行定义一个数据库模型,完成以下任务:
- 对该数据库功能的文字描述,相关条件及约束
- 画E/R图
- 转化为关系表
- 输入该模型进入mysql
- 进行相关操作查询操作的展示
要求:至少要包含三张关系表,每个表至少包含三个元组,进行至少五次不同的查询操作且要包括将三张表连接的查询操作
数据库功能描述、相关条件及约束
我定义了一个图书管理系统的数据库模型,用于存储和查询图书馆的图书、读者和借阅信息。该数据库模型的相关条件和约束如下:
- 图书表(Book)包含图书的编号(Bno)、书名(Bname)、作者(Author)、出版社(Publisher)、出版日期(PubDate)、价格(Price)和库存量(Stock)等属性,其中图书编号是主键,不可为空,且唯一。
- 读者表(Reader)包含读者的编号(Rno)、姓名(Rname)、性别(Gender)、年龄(Age)、电话(Phone)和借阅次数(BorrowTimes)等属性,其中读者编号是主键,不可为空,且唯一。
- 借阅表(Borrow)包含借阅的编号(Lno)、图书编号(Bno)、读者编号(Rno)、借阅日期(BorrowDate)、归还日期(ReturnDate)和逾期罚款(Fine)等属性,其中借阅编号是主键,不可为空,且唯一,图书编号和读者编号是外键,分别参照图书表和读者表的主键。
- 图书表和读者表之间是多对多的关系,通过借阅表实现。
- 借阅表的归还日期必须大于或等于借阅日期,逾期罚款根据归还日期和借阅日期的差值计算,每超过一天罚款0.5元。
- 读者表的借阅次数是根据借阅表的记录统计的,每借阅一本图书,借阅次数加一。
- 图书表的库存量是根据借阅表的记录更新的,每借出一本图书,库存量减一,每归还一本图书,库存量加一。
ER图
1 | erDiagram |
ER图转化为关系表
Book(Bno, Bname, Author, Publisher, PubDate, Price, Stock)
Borrow(Lno, Bno, Rno, BorrowDate, ReturnDate, Fine)
Reader(Rno, Rname, Gender, Age, Phone, BorrowTimes)
输入数据进mySQL
1 | -- 创建数据库 |
建立好数据库并且完成三张表的创建、数据的输入后,查看数据库如下:
至此,数据库创建成果,数据输入完成。
查询操作及结果展示
主要进行了以下五种查询:
1 | -- 查询图书表中所有图书的信息 |
-
查询图书表中所有图书的信息
-
查询读者表中年龄大于等于22的读者的姓名和电话
-
查询借阅表中逾期罚款大于0的借阅记录的编号和罚款金额
不存在逾期罚款大于0,所以结果为空。修改记录,让张三逾期罚款变成5,输入UPDATE Borrow set Fine = 5 WHERE Rno = 'R001'
,可以看到有记录被修改。
使用查询检查,证实确实得到修改
再做一次查询3,可以得到结果如下:
-
查询图书表和借阅表连接后,借阅日期在2023年11月10日之后的图书的书名和借阅日期
-
查询图书表、读者表和借阅表连接后,读者姓名为李四的图书的书名和作者