一. 实验内容、步骤以及结果
1. 利用图形用户界面连接数据库(10分)。
略
2. 利用命令行连接数据库(10分)。
略
3. 利用图形用户界面创建、备份、删除和还原数据库和数据表(40分,每小题5分)
-
数据库和表的要求
数据库名:SPJ_MNG,其中包含四张表:S表, P表, J表, SPJ表
S (SNO, SNAME, STATUS, CITY)
P (PNO, PNAME, COLOR, WEIGHT)
J (JNO, JNAME, CITY)
SPJ (SNO, PNO, JNO, QTY)
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
-
现在该数据库有若干数据如下,基于该库表完成指定操作。
表略
(1) 创建SPJ_MNG数据库。
略
(2) 在SPJ_MNG数据库中创建以上四张表(只输入一部分数据示意即可)。
略
(3) 导出数据库SPJ_MNG为一个SQL文件。
mysql workbench左上方有一个导航区,
选择administration->data export。
选中需要导出的数据库设置相关参数,进行导出。
(4) 删除已经创建的供应情况表(SPJ表)。
drop tables s,p,j,spj
(5) 删除SPJ_MNG数据库。
drop database spj_2018302390
(6) 利用(3)中备份过的SQL文件还原刚才删除的SPJ_MNG数据库。
MySQL WorkBench中选择Administration → Data Import/Restore。
首先新建数据库SPJ_MNG,然后选中备份文件所在的文件夹,开始导入。
(7) 修改S表,增加一个联系电话的字段STEL,数据类型为字符串类型,并修改S表中SNO允许的字符串最大长度。
alter table s add stel char(15);
alter table s alter column sno char(20);
(8) 了解MySQL 的物理存储文件,查看本机MySQL服务安装目录下(如默认安装C:\ProgramData\MySQL\MySQL Server 8.0\Data)的数据文件。尝试分别按照InnoDB和MyISAM不同的存储引擎创建表,观察并说明物理存储文件差异。
差异:
InnoDB 支持事物,是事物安全的,提供行级锁和外键约束,有缓冲池,用于缓冲数据和索引。
MyiSAM不支持事物,不支持外键约束,不支持行级锁,操作时需要锁定整张表,不过会保存表的行数,执行较快。
4. 利用命令行创建、备份、删除和还原数据库和数据表(40分,每小题5分)
-
数据库和表的要求
数据库名:Student, 其中包含三个表:S,C,SCS (SNO, SNAME, SGENDER, SBIRTH, SDEPT, SAGE)
C (CNO, CNAME, CPNO, CREDIT)
SC (SNO, CNO, GRADE)
学生信息表S由学生学号(SNO)、姓名(SNAME)、性别(SGENDER)、出生日期(SBIRTH)、所在学院(SDEPT)、年龄(SAGE)组成。
课程信息表P由课程编号(CNO)、课程名(CNAME)、先修课编号(CPNO)、学分(CREDIT)组成。
选课信息表SC由学生学号(SNO)、课程编号(CNO)、成绩(GRADE)组成。表示某个学生选修了某门课程,成绩为GRADE。
-
现在该数据库有若干数据如上所示,基于该库表完成指定操作。
数据略
(1) 用SQL语句创建数据库Student。
Create database student
(2) 用SQL语句创建上述的三张表,各个字段的数据类型请自己确定,每张表只要有主键约束即可,不要其他约束。不用输入数据。
CREATE TABLE s (
Sno INT ,
Sname CHAR (20),
Sgender CHAR (5) ,
Birth CHAR (20),
Sdept CHAR (5),
PRIMARY KEY (Sno )
);
CREATE TABLE c (
Cno INT ,
Cname CHAR (20),
Cpno INT,
Credit INT,
PRIMARY KEY (Cno )
);
CREATE TABLE sc (
Sno INT ,
Cno INT ,
Grade INT,
FOREIGN KEY (Sno) REFERENCES s(Sno),
FOREIGN KEY (Cno) REFERENCES c(Cno)
);
(3) 备份数据库Student。
命令行切换到C:\Program Files\MySQL\MySQL Server 8.0\bin目录下面
(用mysqldump命令。)(回车后要求输入-u用户的密码):
mysqldump -h localhost -u root -p student > d:\student.sql
mysqldump -h localhost -u root -p --no-data --databases student > d:\s2.sql
h: 服务器名或IP;-u: 用户名; -p:密码 student:待备份库
--no-data: 不备份数据
含义:将本机数据库student备份到d盘的sql文件中。
(4) 用SQL语句删除创建的表。
drop tables s, c,sc;
(5) 用SQL语句删除创建的数据库。
drop databases student;
(6) 用SQL语句利用(3)中的备份文件还原student数据库。
先使用SQL语句创建Student数据库,再利用(3)中备份的文件进行还原。
打开cmd.exe运行程序,切换到MySQL的bin目录下面,使用以下命令进行还原:
create database student;
mysql -h localhost -uroot -p student<d:/student.sql
(7) 修改S表,增加一个联系电话的字段STEL,数据类型为字符串类型,并修改S表中SNO允许的字符串最大长度。
alter table s add stel char(15);
alter table s alter column sno char(20);
(8) 查看mysqldump 生成的SQL文件中的定义数据库或表的SQL脚本,对比自动生成的脚本和自己写的SQL语句的异同点。
MySQL dump生成的SQL文件中的SQL脚本解释性语言较多,并且会在每一个建表语句之前删除同名表等,sql语句编写较为完整,逻辑缜密。
二. 实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)
问题:在使用命令行对字符串长度进行更改的时候,发现云数据库上的代码命令行中实现不了。
解决方案: alter table s alter column sno varchar(20);
变为:mysql8.0: alter table s modify sno varchar(20);
随着版本的改变,mysql 语句也在做着改变