数据库实验报告(实验一)
- 格式:doc
- 大小:1.70 MB
- 文档页数:12
沈 阳 工 程 学 院 学 生 实 验 报 告
(课程名称:数据库原理 及应用)
实验题目: 数据库模式设计
班 级 软本112 学 号 2011417216 姓 名 石金栋
日 期2012.10.16地 点F座606指导教师孙宪丽 祝世东
1
一、实验目的
熟练掌握采用SQL命令建立数据库表、索引和视图的方法.
二、实验环境
Oracle10g数据库系统.
三、实验内容与要求
(一)实验内容
1.建立学生数据库模式
学生表:student (sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept
所在系)
其中:
sno 长度为4的字符串,为主码;
sname 长度为8的字符串;
ssex 长度为2的字符串,其值只取男、女;
sage 短整数,其值在0-150之间;
sdept 长度为10的字符串.
2.建立课程数据库模式
课程表:course ( cno课程号,cname课程名,ccredit学分)
其中:
cno 长度为4的字符串,为主码
cname 长度为10的字符串,不能为空,且不能有重复课程名;
ccredit 短整数.
3.建立选课数据库模式.
选课表: sc (sno学号, cno课程号, grade成绩)
其中:
sno 长度为4的字符串,和student表sno外键关联,且级联删除
cno 长度为4的字符串,course表cno外键关联,
2 grade 短整数,值或空或为0—100之间,
(sno, cno) 联合作主码.
(二)实验要求
在Oracle10g的iSQLPlus中完成下列操作:
(1)创建上述三个表.
(2)向Student 表增加"入学时间"列(列名为Scome,日期型).
(3)将年龄的数据类型改为半字长整数.
(4)为Student中sname添加列级完整性约束,不能为空.
(5)删除Student中sname列级完整性约束.
(6)为SC建立按学号升序和课程号降序建立唯一索引.
(7)在表student的sname字段建立一个升序索引.
(8)删除在表student的sname字段建立的索引.
(9)给student表增加一个地址(address)属性.
(10)给student表删除地址(address)属性.
(11)建立视图 view1,要求有sno,sname,cname,grade四个字段.
(12)建立视图view2,要求有sno,ssex,sage三个字段.
3
四、实验过程及结果分析
(1)创建三个表
1.建立student表
create table student
( sno char(4) primary key,
sname char(8),
ssex char(2) check(ssex in('男','女')),
sage smalint check(sage>=0 and sage<=150),
sdept char(10),
);
ERROR at line 6:
ORA-00904: : invalid identifier
分析:数据类型错误,应为smallint,且最后一行不能用逗号.
改正:create table student
( sno char(4) primary key,
sname char(8),
ssex char(2) check(ssex in('男','女')),
sage smallint check(sage>=0 and sage<=150),
sdept char(10)
);
实验结果如图1.1所示
图1.1
2.建立course表
4 create table course
( cno char(4) primary key,
cname char(8) unique and not null,
ccredit smallint
);
ERROR at line 3:
ORA-00907: missing right parenthesis
分析:not null ,unique不能用and连接,用unique(cname)表示不能为空.
改正:create table course
( cno char(4) primary key,
cname char(8) not null,
unique(cname),
ccredit smallint
);
实验结果如图1.2所示
图1.3
3.建立sc表
create table sc
( sno char(4),
cno char(4) ,
grade smallint check(grade=0 or grade>=0 and grade<=150),
primary key(sno,cno),
foreign key(sno) references student(sname)
on delete cascade,
foreign key(cno) references course(cname)
5 );
ERROR at line 6:
ORA-02270: no matching unique or primary key for this column-list
分析:被参照表的参照列必须是主码
改正:create table sc
( sno char(4),
cno char(4) ,
grade smallint check(grade=0 or grade>=0 and grade<=150),
primary key(sno,cno),
foreign key(sno) references student(sno)
on delete cascade,
foreign key(cno) references course(cno)
);
实验结果如图1.3所示
图1.3
(2) alter table student add scome date;
实验结果如图1.4所示
图1.4
(3) alter table student modify(sage number);
实验结果如图1.5所示
6
图1.5
(4) alter table student add not null(sname);
ERROR at line 1:
ORA-00904: : invalid identifier
分析:更改列级为空时,用modify sname not null
改正:alter table student modify (sname not null);
实验结果如图1.6所示
图1.6
(5)alter table student drop same;
ERROR at line 1:
ORA-00905: missing keyword
改正:alter table student drop CONSTRAINT SYS_C006327 CASCADE
实验结果如图1.7所示
图1.7
(6)create unique index Scno on sc(sno asc,cno desc);
实验结果如图1.8所示
7
图1.8
(7)create index stusname on student (sname);
实验结果如图1.9所示
图1.9
(8)drop index stusname;
实验结果如图2.0所示
图2.0
(9)alter table student add address;
ERROR at line 1:
ORA-02263: need to specify the datatype for this column
分析:增加属性应定义其类型,address是char型
改正:alter table student add address char(10);
实验结果如图2.1所示
图2.1
8 (10)alter table student drop address;
ERROR at line 1:
ORA-00905: missing keyword
分析:删除某一属性时应级联删除,用cascade级联删除.
改正:alter table student drop ( "ADDRESS") CASCADE CONSTRAINTS
实验结果如图2.2所示
图2.2
(11)create view view1
as select sno ,sname ,cname,grade
from student ,course;
ERROR at line 2:
ORA-00904: "GRADE": invalid identifier
分析:建立视图时,有不同表的属性,应表明是哪个表的属性,如sc.sno.
改正:create view view1
as select student.sno ,sname ,ame,sc.grade
from student ,course,sc;
实验结果如图2.3所示
图2.3
(12)create view view2
as select sno,ssex,sage
from student ;