广州大学学生实验报告
开课学院及实验室:计算机科学与工程实验室418B室 2018年05月 09 日
学院 |
计算机科学与教育软件 |
年级、专业、班 |
网络*** |
姓名 |
卟咚君 |
学号 |
1606100*** |
|
实验课程名称 |
数据库原理实验 |
成绩 |
|
|||||
实验项目名称 |
数据库及数据表的创建与删除 |
指导老师 |
|
|||||
实验目的
在数据库中,基本表用于存储数据;视图是虚表,在数据库中只存储视图定义(物化视图除外),通过视图可以查询、更新基本表中的数据;索引主要用于提高存取效率。通过本次实验,可以掌握基本表、视图、索引在数据库中的基本管理方法。
实验要求
熟悉实验室实验环境,阅读本次实验预备知识,熟悉基本表、视图、索引的基本概念,了解基本表、视图、索引的基本管理语法。实验中根据实验步骤要求书写相应的SQL代码并运行,记录和分析运行结果,使用代码验证SQL代码执行后是否满足步骤要求,并独立完成实验报告。
实验环境
Oracle 10g,windows 2003;
实验内容和步骤
(建议先把实验内容和步骤拷贝到SQL Developer工作区,然后按步骤进行实验,后同)
1.创建学生选课关系数据库中的STUDENT表(特别提示:表结构见1.3节,使用书上的表结构是错误的,后同);
create table Student
(
Sno char(9) primary key,/*列级完整性约束条件*/
Sname char(20) unique,
Ssex char(3),
Sage smallint,
Sdept char(20)
);
2.创建学生选课关系数据库中的COURSE表;
create table Course
(
Cno char(4) primary key,
Cname char(40),
Cpno char(4),
Ccredit smallint,
foreign key (Cpno) references Course(Cno)/*表级完整性约束条件*/
);
3.创建学生选课关系数据库中的SC表;
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)
);
4.运行下列语句,为基本表添加数据;
--以下为学生表的初始数据
insert into Student(sname,ssex,sno, sage, sdept) values('李勇','男','200215121',20,'CS');
insert into Student(sname,ssex,sno, sage, sdept) values('刘晨','女','200215122',19,'CS');
insert into Student(sname,ssex,sno, sage, sdept) values('王敏','女','200215123',18,'MA');
insert into Student(sname,ssex,sno, sage, sdept) values('张立','男','200215125',19,'IS');
--以下为课程表的初始数据
insert into course(cno,cname,cpno,ccredit) values('6','数据处理',null,2);
insert into course(cno,cname,cpno,ccredit) values('2','数学',null,2);
insert into course(cno,cname,cpno,ccredit) values('7','PASCAL语言','6',4);
insert into course(cno,cname,cpno,ccredit) values('5','数据结构','7',4);
insert into course(cno,cname,cpno,ccredit) values('1','数据库','5',4);
insert into course(cno,cname,cpno,ccredit) values('3','信息系统','1',4);
insert into course(cno,cname,cpno,ccredit) values('4','操作系统','6',3);
--以下为选修表的初始数据
insert into sc(sno,cno,grade) values('200215121','1',92);
insert into sc(sno,cno,grade) values('200215121','2',85);
insert into sc(sno,cno,grade) values('200215121','3',88);
insert into sc(sno,cno,grade) values('200215122','2',90);
insert into sc(sno,cno,grade) values('200215122','3',80);
commit;
5.修改Student表结构,为Student表格添加一个“入学时间”属性,属性名为Senrollment,各元组在属性Senrollment的值是多少;
alter table student add Senrollment date;
--各元素在Senrollment的值为null
6.修改Student表结构,把Ssex列的宽度设置为6个字节;
alter table student modify Ssex char(6);
7.修改Student表结构,删除Senrollment列;
alter table student drop column Senrollment;
8.创建视图ds,该视图包含所有选修了“数据库原理”的学生信息(如果提示没有权限,请使用管理员授予当前用户Create view权限);
create view ds as select *from student where sno in (select sno from sc,course where sc.cno=course.cno and course.cname='数据库原理');
9.创建视图maleStudent,该视图包含男学生所有信息,通过视图maleStudent更新基本表数据时必须保证学生性别为男;
create view maleStudent as select *from student where student.ssex='男' with check option;
10.删除视图maleStudent;
drop view maleStudent;
11.为Course表的CName列建立唯一索引,索引名称为uniqueCname;
create unique index uniqueCname on course(cname);
12.试着为Course表的Cpno列建立唯一索引,索引名为indexCpno1,如果发生错误,请说明普通索引和唯一索引有何区别;
create unique index indexCpno1 on course(cpno);
--当要创建索引的列中的内容的值没有重复时(空值除外),才能对其创建唯一索引,否则,就创建不了唯一索引。通常来说,对于相同环境下(相同的对象,相同的操作,相同的检索条件等),唯一索引都会更好一些,其COST值也要更低一些。
13.为Cource表的Cpno列建立普通索引,索引名称为indexCpno2;
create index indexCpno2 on course(cpno);
14.删除索引indexCpno2;
drop index indexCpno2;
15.删除基本表Student,如果发生错误,请分析原因;
drop table student cascade constraints;
--该表被其他表的约束所引用,存在依赖该表的对象,不能删除。选择级联删除可将依赖对象一起删除
16.删除基本表SC;
drop table sc;
17.参考1.3节学生选课关系数据库的表结构,列出各个关系表应有的主码和外码约束(文字回答即可);
--在学生表中,sno约束为主码,sname约束为唯一。在课程表中,cno约束为主码,cname约束为唯一,cpno为外码,引用course(cno).在学生选修表中,sno为外码,参照student(sno),cno为外码,参照corse(cno)
18.查看已创建的Student、SC、Course表的约束,如果某个表缺少应有的主码或外码约束,为该表添加缺失的主码或外码约束。
实验总结
总结实验过程中涉及到的知识点、实验过程中遇到的问题及解决方法。
通过该实验,掌握了基本表、视图、索引的创建与删除等基本管理语法。在创建基本表的时候,要根据实际情况对各个列属性进行约束。对于一些表参照了别的基本表的,删除被参照的基本表的时候,不能直接删除,需要级联删除。
在用户创建视图之前,需要先把创建视图的权限给予该用户。还有就是创建唯一索引时,需要创建索引的列中的内容的值没有重复时(空值除外)。