实验项目
实验1 实验环境与操作流程
实验2 数据定义、查询与更新
实验3 基本表的定义、删除与修改
实验4 数据的插入、修改和删除
实验5 数据的查询
实验6 数据的视图
实验7 完整性语言
实验8 触发器
实验9 存储过程与函数
实验10 SQL语句1(创建、插入、查询)
实验11 SQL语句2(查询)
实验12 SQL语句3(视图、完整性、关系代数查询)
实验3 基本表的定义、删除与修改
一、实验目的
1. 理解数据库设计的概念及实验环境;
2. 掌握MySQL数据库的相关概念;
3. 掌握使用SQL语句定义与删除模式的方法;
4. 掌握使用SQL语句定义、删除与修改基本表的方法;
5. 掌握使用SQL语句建立与删除索引的方法。
二、实验要求
1. 熟练掌握使用SQL语句定义与删除模式的方法及步骤;
2. 熟练掌握使用SQL语句定义、删除与修改基本表的方法及步骤;
3. 熟练掌握使用SQL语句建立与删除索引的方法及步骤。
三、实验内容
(参考课本3.2与3.3)
- 定义数据库:创建学生-课程数据库student_course。
- 定义表:(注意:列名、数据类型以及完整性约束条件)
- 按照学生-课程数据库中的表结构,创建学生表Student,参考例3.5。
- 按照学生-课程数据库中的表结构,创建课程表Course,参考例3.6。
- 按照学生-课程数据库中的表结构,创建学生选课表SC,参考例3.7。
- 修改表:
- 向Student表增加“入学时间”列,其数据类型为日期型,参考例3.8。
- 将Course表中增加课程名称必须取唯一值的约束条件,参考例3.10。
- 将Student表中增加的入学时间列删除。
- 将Course表中增加的课程名称取唯一值的约束条件删除。
- 建立索引:
- Student表按学号升序建唯一索引,参考3.13。
- Course表按课程号升序建唯一索引,参考3.13。
- SC表按学号升序和课程号降序建唯一索引,参考3.13。
- 删除索引:将SC表的SCno索引删除。
- 删除表:
- 删除Student表,选择restrict。
- 删除Student表,选择cascade,参考例3.11。
- 删除数据库:删除stu数据库。
实验指导:
- 进入mysql命令行:
(方式1)找到mysql的安装位置,并进入到bin文件夹下,在红色的地址框框中输入cmd进入。进入后使用命令mysql –u root –p并输入管理员密码root进入mysql。
(方式2)选中Navicat中的任一连接或者数据库,右键选中“命令列界面”打开。
- 定义数据库:
先查看已有数据库,后使用sql命令创建学生-课程数据库student_course,再查看现有哪些数据库。
- 定义表:(注意:列名、数据类型以及完整性约束条件)
- 使用student_course数据库,在此数据库下创建基本表。
- 按照79页中学生-课程数据库的表结构,输入SQL命令创建学生表Student(Sno,Sname,Ssex,Sage,Sdept),其中Sno为主码,Sname取唯一值,参考例3.5。
- 按照79页中学生-课程数据库的表结构,输入SQL命令创建课程表Course(Cno,Cname,Cpno,Ccredit),其中Cname为主码,Cname不能取空值,Cpno为一个参照Course表中Cno的外码,参考例3.6。
- 按照80页中学生-课程数据库的表结构,输入SQL命令创建学生选课表SC(Sno,Cno,Grade),其中主码为(Sno,Cno),Sno为一个参照Student表中Sno的外码,Cno为一个参照Course表中Cno的外码,参考例3.7。
- 查看数据库中目前有哪些表存在。
- 修改表:
- 使用describe <表名>,查看Student表、Course表以及SC表在目前状态下的结构。分别输入以下命令:describe student; describe course; describe sc;,查看表中的属性名、数据类型、是否为空、是否为主码或外码等。
- 使用修改基本表的SQL命令,向Student表增加“入学时间”列,其数据类型为日期型,参考例3.8。查看student表的当前结构。
- 使用修改基本表的SQL命令,将Course表中增加课程名称必须取唯一值的约束条件,参考例3.10。查看Course表的当前结构。
- 使用修改基本表的SQL命令,将Student表中增加的入学时间列删除。查看student表的当前结构。
- 使用修改基本表的SQL命令,将Course表中增加的课程名称取唯一值的约束条件删除。查看Course表的当前结构。
- 建立索引:
- 使用show index from <表名>,查看Student表、Course表以及SC表的已有索引信息。分别输入以下命令:show index from student; show index from course; show index from sc;,查看表的名称、索引能否包括重复词、索引的名称、索引的序列号、列名称、列以什么方式存储在索引中等信息。
- 使用建立索引的SQL命令,使得Student表按学号升序建唯一索引Stusno,参考3.13。查看Student表的索引信息。
- 使用建立索引的SQL命令,使得Course表按课程号升序建唯一索引Coucno,参考3.13。查看Course表的索引信息。
- 使用建立索引的SQL命令,使得SC表按学号升序和课程号降序建唯一索引SCno,参考3.13。查看SC表的索引信息。
- 删除索引:使用删除索引的SQL语句,将SC表的SCno索引删除。查看SC表的索引信息。
- 删除表:
- 使用删除基本表的SQL语句,删除Student表,选择restrict。
- 使用删除基本表的SQL语句,删除Student表,选择cascade,参考例3.11。
- 上述删除均失败了(与课本不同,因为不同数据库中具体操作限制不太一样),原因是都涉及到SC表。解决策略为先删除SC,再删除其余两个表。查看数据库中还有哪些表。
- 删除数据库:删除student_course数据库。查看有哪些数据库存在。
实验3代码:
create table Student(
Sno char(9) primary key,
Sname char(2) unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
);
create table Course(
Cno char(4) primary key,
Cname char(40) not null,
Cpno char(4),
Ccredit smallint,
foreign key (Cpno) references Course(Cno)
);
create table SC(
Sno char(9),
Cno char(4),
Grade smallint,
primary key (Sno,Cno),
foreign key (Sno) references Student(Sno),
foreign key (Cno) references Course(Cno)
);