资源描述
\\
《数据库系统》实验报告四
学号
姓名
实验时间
2014-12-3
实验名称
数据库模式管理
实验学时
4
准备材料
1. SQL Plus命令手册
2. Oracle数据字典
3. Oracle中的数据类型
扩展实验
1. 掌握在企业管理器中进行表的创建和管理的方法。
2. 利用企业管理器观察数据库的物理模式。
(此部分内容不要求在实验室完成,不用写入实验报告。)
实验环境
Oracle 9i(及以上版本)服务器
SQL Plus/ SQL Plus work sheet客户端
实验目的
1. 掌握使用SQL语句进行表的创建和管理的方法
2. 加深对关系数据库结构和数据完整性等概念的理解
实验内容及步骤
1. 创建书上university数据库中所有的表,并使用命令观察用户所有表的表名、观察每张表的结构及每张表上的约束信息。
select * from user_tables;
desc SECTION;
select * from user_constraints where table_name = SECTION;
2. 修改表结构
(1) 在instructor表中增加列存储教师家庭地址,其地址包括省、市、区、街道、门牌号等列,列的数据类型自己给出,列允许为空。
alter table instructor add (province varchar(30),city varchar(30),street varchar(30),house_number varchar(30));
(2) .对student表中的姓名字段长度都改为10,设置是否成功?原因是什么?将该字段长度改为50,能否成功?说明原因。
alter table student modify name varchar(10);
修改成功
alter table student modify name varchar(50);
修改成功
只要修改的长度若大于已存在的字符的最大长度都行
(3) 为student表中tot_cred列设置默认值 0,插入一个新学生,且不给其tot_cred列赋值,观察结果。
alter table student modify tot_cred default 0;
insert into student (ID,NAME,DEPT_NAME) values(110,zhuanghan,Finance);
select ID,NAME,DEPT_NAME from student;
(4) student表中tot_cred列是对总学分的统计,现在数据库中没有记录哪些学生已选修课程学分已累加,哪些课程的学分还没有累加。设计一种方案记录已累加课程,防止出现重复累加的情况。
或者设计一种方案简化总学分的计算过程。
方案:对takes表增加多一个字段isComputed作为标记,已经被累加的则这个字段为1,没有被累加的为零,统计时就只需要找到takes上isComputed为0的数据进行累加
(5) 删除takes表上对student表ID的外键约束,再添加takes表是对student表ID 的外键 约束 ,观察并解释实验结果。添加一个不存在的学生选修CS001课程的信息,并给他一个成绩。再添加takes表是对student表ID 的外键 约束 ,观察并解释实验结果。
ALTER TABLE TAKES DROP CONSTRAINT SYS_C0054665;
ALTER TABLE TAKES ADD CONSTRAINT SYS_C0054665 FOREIGN KEY(id) REFERENCES STUDENT(id);
insert into takes values (1111,CS-001,1,Spring,2013,A);
ALTER TABLE TAKES ADD CONSTRAINT SYS_C0054665 FOREIGN KEY(id) REFERENCES STUDENT(id);
(6) 设置takes表ID, course_id,sec_id三个字段非空,是否能设置成功,对插入数据有没有影响? 删除takes表主键约束,增加某同学选同一门课程(id, couese_id, sec_id, semester, year, grade都相同)的信息,能否插入成功?解释原因。
alter table takes modify(ID not null,course_id not null,sec_id not null);
插入的数据这三个字段必须不为空,修改设置时,如果字段有为NULL则修改失败。
ALTER TABLE TAKES DROP PRIMARY KEY;
3. 参照表student建立一张空表student1。要求用两种方法实现 (create table; create table as …)。
create table student1
(ID varchar(5),
name varchar(20) not null,
dept_name varchar(20),
tot_cred numeric(3,0) check (tot_cred >= 0),
primary key (ID),
foreign key (dept_name) references department on delete set null
);
create table student2 as select * from student;
4. 选择某个约束,分别设置其有效、失效,观察区别。
ALTER TABLE STUDENT ENABLE CONSTRAINT SYS_C0054432;
ALTER TABLE STUDENT DISABLE CONSTRAINT SYS_C0054432;
选择STUDENT里面的tol_red>0的约束条件,将其置为有效和无效后重新查看约束状态等都看不出区别;唯一的解释是更改约束状态不改变数据库的数据。
出现问题
创建表时设置了约束条件,但没有设置约束名,怎么知道约束名是什么?
解决方案
(列出遇到的问题及其解决方法)
展开阅读全文
相关搜索