《数据库系统概论》
实验报告书
专业班级
学 号
119074415
网134
姓 名 云飞 指导教师 周兵
安徽工业大学计算机科学与技术学院
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
实验一:数据定义语言
[ 实验日期 ] 年 月 日 [ 实验目的 ]
熟悉Oracle上机环境及Oracle客户端的配置;熟练掌握和使用DDL语言,建立、修改和删除数据库表、主键、外键约束关系和索引。 [ 实验内容 ]
Oracle上机环境以及Oracle客户端的配置参见附录。 1. SQL数据定义语句:
例1-1: (建立数据库表) 建立教学数据库的四个数据库表,其中Student表中不包含SSEX(C,2) 字段,Sname 字段为Sname(C,8)且可为空。 CREATE TABLE Student(
SNO CHAR(5), SNAME CHAR(10) NULL, SDEPT CHAR(2), SCLASS CHAR(2), SAGE NUMBER(2),
CONSTRAINT SON_PK PRIMARY KEY(SNO)); CREATE TABLE Course(
CNO CHAR(3), CNAME VARCHAR2(16), CTIME NUMBER(3),
CONSTRAINT CNO_PK PRIMARY KEY(CNO)); CREATE TABLE Teach(
TNAME CHAR(8), TSEX CHAR(2), CNO CHAR(3), TDATE DATE, TDEPT CHAR(2),
CONSTRAINT TT_PK PRIMARY KEY(TNAME,CNO,TDEPT),
CONSTRAINT CNO_FK FOREIGN KEY(CNO) REFERENCES Course(CNO)); CREATE TABLE Score(
SNO CHAR(5), CNO CHAR(3),
2/19
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
SCORE NUMBER(5,2),
CONSTRAINT SC_PK PRIMARY KEY(SNO,CNO),
CONSTRAINT CNO1_FK FOREIGN KEY(CNO) REFERENCES Course(CNO), CONSTRAINT SNO_FK FOREIGN KEY(SNO) REFERENCES Student(SNO)); (Score表中定义外键的名称不能为CNO,被Teach表中约束条件占用) 例1-2: (修改数据库表) 在Student表中增加SEX(C,2) 字段。 ALTER TABLE Student ADD SEX CHAR(2);
例1-3: (修改列名) 将Student表中列名SEX修改为SSEX。
ALTER TABLE Student RENAME COLUMN SEX TO SSEX;
例1-4: (修改数据库表) 将Student表中把Sname 字段修改为Sname(C,10)且为非空。
ALTER TABLE Student MODIFY SNAME CHAR(10) NOT NULL;
例1-5: (建立索引) 为Score表按课程号升序、分数降序建立索引,索引名为SC_GRADE。 CREATE UNIQUE INDEX SC_GRADE ON Score(CNO ASC,SCORE DESC); 例1-6: (删除索引) 删除索引SC_GRADE。
DROP INDEX SC_GRADE;
例1-7: (建立数据库表) 建立数据库表S1(SNO,SNAME,SD,SA),其字段类型定义与Student表中的相应字段(SNO,SNAME,SDEPT,SAGE)的数据类型定义相同。 CREATE TABLE S1(
SNO CHAR(5) PRIMARY KEY NOT NULL, SNAME CHAR(10), SD CHAR(2),
SA NUMBER(2)); create table S1 as(select SNO,SNAME,SDEPT as SD,SAGE as SA from Student where 1=2);
例1-8: (修改数据库表) 删除成绩表Score的参照完整性约束关系。
ALTER TABLE Score DROP CONSTARINT SNO_FK; ALTER TABLE Score DROP CONSTARINT CNO1_FK;
例1-9: (修改数据库表) 添加成绩表Score的参照完整性约束关系。
ALTER TABLE SCORE ADD CONSTRAINT CNO1_FK FOREIGN KEY(CNO) REFERENCES Course(CNO); ALTER TABLE SCORE ADD CONSTRAINT SNO_FK FOREIGN KEY(SNO) REFERENCES Student(SNO)); 例1-10: (修改数据库表名) 将数据库表S1改名为Student_Temp。
RENAME S1 TO Student_Temp; [ 实验要求 ]
① 熟悉Oracle上机环境,掌握Oracle客户端的配置; ② 建立数据库表,修改数据库表结构,建立、删除索引; [ 实验方法 ]
3/19
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
① 按照附录中的操作步骤进行客户端的配置; ② 将实验需求用SQL语句表示; ③ 执行SQL语句;
④ 查看执行结果,如果结果不正确,进行修改,直到正确为止。
[ 实验总结 ]
① SQL语句以及执行结果; ② 对重点实验结果进行分析; ③ 实验中的问题和提高; ④ 收获与体会;
实验心得:从这个实验中我学会了表的建立,内部一些格式的修改,在开始的时候我认为十分麻烦,但是随着我接触的多了,我感到有些代码都是相似的,找到相关的关联,就能够事半功倍。还有就是我发现许多表之间存在着联系,所以我要抓住相互的联系,才能更好的发挥数据语言的作用。
实验二:数据操纵语言
[ 实验日期 ] 年 月 日 [ 实验目的 ]
在实验一的基础上,熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。 [ 实验内容 ]
2. SQL数据操纵语句:
例2-1:(插入数据) 按前面各表中的数据分别插入到教学数据库的四个数据库表中。
例2-2:(多行插入) 将表Student中在计算机系(‘CS’)的学生数据插入到表Student_Temp中。
INSERT INTO Student_Temp(SNO,SNAME,SD,SA) SELECT SNO,SNAME,SDEPT,SAGE FROM STUDENT WHERE SDEPT='CS';
(以上操作中,注意用COMMIT提交数据,将数据保存到数据库服务器)
例2-3:(利用查询来实现表的定义与数据插入) 求每一个学生的平均成绩,把结果存入数据库表Student_Gr中。
CREATE TABLE Student_Gr( SNO CHAR(10), SAVG NUMBER(5,2));
INSERT INTO Student_Gr(SNO,SAVG) SELECT SNO,AVG(Score)
4/19
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
FROM Score
GROUP BY SNO;(create table Student_Gr as(select SNO,AVG(SCORE) from Score group by SNO);) 例2-4: (修改数据) 将Student_Temp表中所有学生的年龄加2。
UPDATE Student_Temp SET SA=SA+2;
例2-5: (修改数据) 将Course表中‘程序设计’课时数修改成与‘数据结构’的课时数相同。
UPDATE Course SET CTIME=(SELECT CTIME FROM Course WHERE CNO='004') WHERE CNO='008';
例2-6: (插入数据) 向Score表中插入数据(‘98001’, ‘001’, 95),根据返回信息解释其原因。 INSERT INTO SCORE VALUES('98001','001',95); 插入的数据 如果某个字段是外键 那么该值要么为空 要么在主键表中 有对应的主键值,否则就不满足参照完整性约,Score表中的SNO字段是根据Student中的SNO建立的,然而Student中的SNO中没有98001。
例2-7: (插入数据) 向Score表中插入数据(‘97001’, ‘010’, 80),根据返回信息解释其原因。 INSERT INTO SCORE VALUES('97001','010',85);因为Score表中的CNO字段是根据Course中的CNO建立的,Course表中并没有课程号是010的。
例2-8: (删除数据) 删除Student表中学号为‘96001’的学生信息,根据返回信息解释其原因。 DELETE FROM Student WHERE SNO='96001'; 因为Student表中学号已经被别的表作为外键,
不可以被删除,违反完整约束条件
例2-9: (删除数据) 删除Course表中课程号为‘003’ 的课程信息,根据返回信息解释其原因。 DELETE FROM COURSE WHERE CNO='003'; 因为Course表中课程号已经被别的表作为外键,不
可以被删除,违反完整约束条件。
例2-10: (删除数据) 删除学生表Student_Temp中学号以96打头的学生信息。
DELETE FROM Student_Temp WHERE SNO LIKE '96%'; (此操作后,注意用ROLLBACK回退可能更新的数据)
例2-11: (删除数据) 删除数据库表Student_Temp中所有学生的数据。
DELETE FROM Student_Temp WHERE 2!=0;(此处的条件语句为真即可,例如2=2) 例2-12:(删除表) 删除数据库表Student_Temp和Student_Gr。
DROP TABLE Student_Temp;DROP TABLE Student_Gr; [ 实验要求 ]
对数据库表进行插入、修改和删除数据的操作。 [ 实验方法 ]
① 按照附录中的操作步骤进行客户端的配置;
② 将实验需求用SQL语句表示; ③ 执行SQL语句;
④ 查看执行结果,如果结果不正确,进行修改,直到正确为止。
[ 实验总结 ]
① SQL语句以及执行结果; ② 对重点实验结果进行分析;
5/19