实验二 用 MySQL 实现数据库设计实验目的:
1. 掌握使用命令行方式创建和管理 MySQL 数据库及相关数据库对象。
2. 掌握使用 SQL 语言中的 SELECT 命令实现查询功能。
上机准备:
1.复习有关关系数据库的基本知识和概念;
2.复习有关 SQL
语言中 SELECT 命令的使用;
3.了解有关 MySQL
系统的组成;
4.了解有关 MySQL
服务器的使用和管理;
5.了解有关 Navicat for MySQL 的基本操作;
6.了解有关数据库备份和恢复的基本操作;实验内容:
本实验将建立一个学校教学管理数据库,在这个数据库中,存储以下信息:
1.有关学生的信息,包括学生的学号,姓名,性别,出生日期,所在班级;
student(Sno,sname,
ssex,sbirth,ClassNo)
Sno CHAR(10),sname varCHAR(8),ssex CHAR(2) DEFAULT ‘男’,
sbirth date,ClassNo char(10)
2.有关班级的信息,包括班级的班名10,专业v10,年级v10,人数,班主任v10,所在院系v18;
sclass(ClassNo,className,major,grade,number,advisor,Dno)
3.有关课程的信息,包括课程编号10,课程名称v50,课程类别(是指该课程为必修,指选还是任选)v50,适用专业v50,开课时间v20,学分v10,周学时v10,先导课号v50(先修课);
course(Cno,cname,category,major, startTM,credits,
weekHours,Cpno)
4.有关教师的信息,包括教师编号10,教师姓名v10,教师性别v10,教师年龄,参加工作时间,所在院系v18;
teacher (Tno,Tname,Tsex,Tage,Tworktime,Dno)
5.有关院系的信息,包括院系编号 10,院系名称v50,院系主任v10,院系所在地址;
department(Dno,Dname,Tno,address)
6.有关学生选课的信息,包括课程编号10,学生的学号,成绩;
sc(Sno,Cno,score)
7.有关教师教授课程的信息,包括教师编号10,课程编号10,授课地点v50,授课学期vchar(10);
tc (Tno,Cno,location,term)
根据第一次实验定义外键和未列出的关系模型,设计生成正确的表。
一、
熟悉开发环境练习:
1.安装 MySQL
数据库和 Navicat 软件。启动或停止 MySQL 服务器
2.了解 MySQL
的版本、数据库引擎、字符集、root 账号和默认端口号。
3.学会使用 MySQL
服务器的连接
4.使用 MySQL
的命令输入界面来执行 SQL 命令。
二、
使用 MySQL 的命令行方式完成数据库及数据库对象的创建和管理实验步骤:
1.创建数据库
(1)要求参数: 数据库名称:study
(2)创建后用 SHOW
查看刚创建的数据库 study;
(3)用 USE
命令选用数据库 study;
(4)用 SQL
语句删除数据库 study;
(5)(选做)用 MYSQLADMIN
创建和删除;直接在数据库目录中创建和删除。
2.创建表
(1)根据上述数据库的信息,决定创建几个表,并给每一个表指定一个有意义的表名;
(2)根据每个表中每列存储的数据的情况,为每个列指定列名,数据类型,数据的长度,是否允许为空等列的属性;
(3)使用命令行方式或者 Navicat
建立所有的表;
(4)创建之后,还可以根据具体情况,再对表的结构进行修改;(包括添加列,删除列,修改已存在的列)
3.实现数据完整性
(1)针对每一个表分析并定义主码(Primary Key)
(2)定义 UIQUE
约束
用来规定一个列中的两行不能有相同的值;例如:希望学生的姓名是唯一的;
(3)针对每一个表分析外部码,并利用“关系图”定义外部码(Foreign
Key),建立表之间的参照关系;
以下示例并不完整,请根据上述数据库的信息补充完整 SQL 命令,并创建表和对应的外键。
例如:
CREATE TABLE student (
sno char(7) NOT NULL,
sname varchar(16)
NOT NULL,
PRIMARY KEY (sno)
);
CREATE TABLE course (
cno char(2) NOT NULL,
cname varchar(20)
NOT NULL,
PRIMARY KEY (cno)
);
Create table sc(
sno char(9) NOT NULL,
cno char(4)NOT, score smallint,
Primary key(sno,cno),
Foreign key(sno) refrences student(sno),
Foreign key(cno) refrences course(cno)
);
(4)创建以上约束后,练习修改约束的操作(包括增加,修改和删除以上约束);
4.根据自己所在班级的情况,对已经创建的表自己输入一些相关示例数据,在输入的过程中,特地输入一些违反上述约束条件的数据,观察处理的效果;
(1)使用企业管理器,完成一些记录的插入、修改和删除;
(2)练习使用
INSERT、UPDATE、DELETE
命令完成记录的插入、修改和删除;如果对该命令的使用不是很清楚,请练习查找“帮助系统”完成上述命令的学习;
insert into student values('2017210000','张三','男','1998-04-05', '2017211130') insert
into course values(‘1’, ‘数据库技术’, ‘指选’,
‘通信工程’, ‘第 2
学期’, ‘2’, ‘2’,NULL) insert
into sc(sno,cno) values(‘2017210000’,’1’)
update course set startTM= ‘每年第
2 学期’
where cno= ‘1’ update sc set score = 90 where sno =’
2017210000’ and cno =’1’ delete from sc where sno =’ 2017210000’ and cno=’1’
(3)练习使用
TRUNCATE TABLE 命令删除表数据; truncate table sc
三、使用 Navicat
创建和管理索引
1.利用表的属性对话框,观察每个表已经自动创建的索引;
2.针对学生选课信息表创建如下索引
(1)
按学号+课程编号建立主键索引;
create index PK_SC ON
SC(sno,cno)
(2)
按学号建立索引,考虑是否需要创建唯一索引;
(3)
按课程编号建立索引,考虑是否需要创建唯一索引;
3.练习索引的修改和删除操作
4.查阅 MySQL
数据库索引的类型、Unique 索引和 FullText
索引,以及效率的问题。
四、实现以下查询
1.练习课堂上举例介绍的几类查询;
2.实现以下查询
(1) 检索选修了课程号为C1或C2课程,且成绩高于或等于70分的学生的姓名,课程名和成绩。
(2) 检索姓“王”的所有学生的姓名和年龄。
(3) 检索没有考试成绩的学生姓名和课程名。
(4) 检索年龄大于女同学平均年龄的男学生姓名和年龄。
注:上述查询中所用的课程号和学号的值,可以根据自己表中的数据作修改;为了验证查询的正确,可能还需要输入或修改表中的示例数据;
五、创建和管理视图
1.创建视图:
使用 Navicat 或使用 CREATE
VIEW 命令
例 1:创建视图,包含所有通信工程专业的学生的信息;例 2:创建视图,包含所有学生的学号,姓名,选课的课程名和成绩;
2.利用已经创建的视图进行查询;
具体代码: https://download.csdn.net/download/by1jing/12364706