数据库实验报告(实验一)

  • 格式: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 ;