数据库原理实验报告.doc
广州大学学生实验报告开课学院及实验室:计算机学院 年 月 日 学 院计算机学院年级、专业、班姓名学号实验课程名称数据库原理成绩实验项目名称SQL语言指 导 教 师注:实验要求与说明(1) 切忌抄袭实验手册任何内容;(2) 切忌抄袭任何其他同学实验报告,包括实验截图等;(3) 每次实验正式进行之前,请仔细阅读实验手册。遇到问题请先自行翻阅实验手册;(3) 请严格按照以下7个大标题填写实验内容;(4) 每一次实验都必须要有截图,以说明本次实验操作得当与否、成功与否。截图必须清晰、大小适当、有正确的先后顺序;每一张图都必须要有题注以说明该图的内容。(截图方法:同时按住ALT和PrtSc,即将当前窗口复制到了系统剪贴板中,再粘贴到实验报告中即可)实验1-1数据库及数据表的创建与删除一、 实验目的掌握利用Oracle Database Configuration Assistant工具来创建和删除Oracle数据库,掌握Oracle中的用Create命令定义表的方法,以及表的完整性定义,并掌握Oracle中的用Alter命令 和Drop命令对表的修改和删除。二、 实验原理基于数据库系统概论,熟悉实验环境,熟悉基本表等本次实验的基本概念,了解创建数据表及其相关操作的语法。根据要求,编写相应的SQL代码,并运行、记录和分析结果,测试所编写代码是否满足步骤要求,完成实验。三、 使用仪器、材料Oracle 11g,windows10;四、 实验步骤1. 创建以下数据表(Student(主码为SNO)、Course(主码为CNO)、SC(主码为(SNO、CNO),其中SNO引用Student的SNO属性,CNO引用Course的CNO属性)2. 向三个表格中插入3条数据,数据内容自编。3. 修改Student表格,用SQL语句为Student表格添加一个“入学时间”属性,属性名为Senrollment。4. 限定Ssex的值只能为“男”或者“女”。5. 修改Course表格,用SQL语句为Course表格添加一个“说明”属性,属性名为“Cdesc”,类型为varchar2,长度为200。6. 更改Course表格的Cdesc属性,使其长度变为500。7. 删除刚建立的属性Cdesc。8. 修改Course表的CPNO,使其为外码,引用Course表的CNO属性。Student表。属性名类型长度是否空含义SNOvarchar217主码(非空)学生编号Snamevarchar210否姓名Sageinteger年龄Ssexvarchar22性别Sdeptvarchar220所在系Course表属性名类型长度是否空含义CNOvarchar25主码(非空)课程编号Cnamevarchar220否课程名CPNOvarchar25先修课程Ccreditinteger学分SC表属性名类型长度是否空含义SNOvarchar217主属性(非空)学生编号CNOvarchar25主属性(非空)课程编号Gradenumeric5,2成绩五、 实验过程原始记录(实验过程、数据、图表、计算等)create table Student( Sno varchar2(17) PRIMARY key, Sname VARCHAR2(10) not null UNIQUE, Sage INT, Ssex VARCHAR2(3) check(Ssex IN('男','女'), Sdept VARCHAR2(20);create table Course( CNO VARCHAR2(5) PRIMARY KEY, Cname VARCHAR2(20) not null, CPNO VARCHAR2(5), Ccredit INT);1.create table SC( Grade numeric(5,2), Sno varchar2(17), Cno varchar2(5), PRIMARY KEY(Sno,Cno), FOREIGN KEY(Sno) REFERENCES Student(Sno), FOREIGN KEY(Cno) REFERENCES Course(Cno);insert into Student(sname,ssex,sno, sage, sdept) values('李勇','男','200215121',20,'CS');/*插入student表数据*/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,) values('6','数据处理',null,2);insert into course values('2','数学',null,2);insert into course values('7','PASCAL 语言','6',4);insert into course values('5','数据结构','7',4);insert into course values('1','数据库','5',4);insert into course values('3','信息系统','1',4);insert into course 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);2.3.在student表格中添加“入学时间”属性,属性名为Senrollmentalter table Student ADD Senrollment date;4. 限定Ssex的值只能为“男”或者“女”答:在创建student基本表时已先行进行了检查。5.在course表格添加“说明”属性alter table Course ADD Cdesc VARCHAR2(200);6.修改Cdese长度变为500alter table Course MODIFY Cdesc VARCHAR2(500);7. 删除刚建立的属性Cdescalter table Course DROP COLUMN Cdesc;8. 修改Course表的CPNO,使其为外码,引用Course表的CNO属性。alter table course add constraint fk1 foreign key(CPno) references course(Cno);六、实验结果及分析实验结果截图,对实验进行说明和分析。1、Course表:SC表:Student表:2、Course表数据:SC表数据:Student表数据:3、4、student表的约束条件总Ssex检查男女。5、6、7、8、七、实验报告思考题 无。八、实验心得体会本次实验主要有以下收获和体会:1、首次使用oracle11g进行数据库实验,基本了解了oracle11g的基本语句和使用方法。2、通过本次实验,对基本表的创建,修改和删除有了实际上的应用,加深了对课本知识的理解,增强了操作能力。3、从实验中总体上增强了对SQL语言的运用和对oracle11g的可视化操作能力,更深层次的了解了SQL的使用方法和oracle11g界面操作。实验1-2 SQL语言一、实验目的熟悉并掌握创建表,插入记录,查询记录,删除记录,修改记录。创建索引,删除索引。创建视图,使用视图,删除视图。二、实验原理。三、使用仪器、材料Oracle 11g,windows10;四、实验步骤现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且可以借给任何单位成员,每个单位成员可以借多本书,单位成员与图书的关系是多对多的关系。假设系统中仅有三个关系模式。数据表结构Reader表属性名类型长度是否空含义RNOvarchar24员工编号(主码)Rnamevarchar210否员工姓名Rsexvarchar22性别Rageintegerinteger年龄Rbossvarchar210直接上司Raddressvarchar230办公地点Book表属性名类型长度是否空含义BNOvarchar24书本编号(主码)Bnamevarchar250否书名Bauthorvarchar250作者Bpressvarchar250出版社Bpricevarchar2numeric(6,2)价格RB表属性名类型长度是否空含义RNOvarchar24员工编号BNOvarchar24书本编号RBdatedate借阅日期1、 创建新的用户并授权:2、 以用户CC的身份建立连接,并在此连接下执行后面的操作;3、 拷贝代码运行,删去旧的同名数据表:4、 建立表格Reader5、 拷贝代码运行,向Reader表格中插入十条数据6、 查询记录:在Reader表中查询直接上司是“李四”的员工的名字7、 修改记录:在Reader表中把直接上司是“李四”的员工的办公地点统一改为“420”8、 删除记录:在Reader表中把直接上司未赋值(NULL)是记录删去9、 删去数据表:把整个Reader表删去10、 重新执行第一、二步,即建立数据表、插入数据。11、 创建表格Reader2,比较Reader2和Reader中的记录和结构是否相同12、 分别执行下面的每行语句,查看语句是否执行成功,分析为什么?13、 删除Reader2表格;14、 拷贝代码运行,建立表格Bookcreate table Book( BNOvarchar2(4), Bnamevarchar2(50) not null, Bauthorvarchar2(50), Bpressvarchar2(50), Bpricenumeric(6,2), primary key(BNO);15、 拷贝代码运行,向Book表格中插入5条数据insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B001','严蔚敏','数据结构','清华大学出版社',null);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B002','唐发根','数据结构','北航出版社',24);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B003','王珊','数据库原理','高等教育出版社',40);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B004','张飞','数据库原理','清华大学出版社',30);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B005','王珊','数据库原理','清华大学出版社',null);16、 拷贝代码运行,建立表格RBcreate table RB( RNO varchar2(4), BNO varchar2(4), RBdate date default sysdate, primary key(RNO,BNO), foreign key (RNO) references Reader(RNO), foreign key (BNO) references Book(BNO);17、 拷贝代码运行,向RB表格中插入13条数据;insert into RB (RNO,BNO) values ('R001','B001');insert into RB (RNO,BNO) values ('R001','B002');insert into RB (RNO,BNO) values ('R001','B004');insert into RB (RNO,BNO) values ('R002','B001');insert into RB (RNO,BNO) values ('R003','B001');insert into RB (RNO,BNO) values ('R004','B001');insert into RB (RNO,BNO) values ('R004','B002');insert into RB (RNO,BNO) values ('R005','B001');insert into RB (RNO,BNO) values ('R006','B001');insert into RB (RNO,BNO) values ('R006','B003');insert into RB (RNO,BNO) values ('R006','B005');insert into RB (RNO,BNO) values ('R006','B002');insert into RB (RNO,BNO) values ('R006','B004');初始数据reader表RNORNAMERSEXRAGERBOSSRADDRESSR001张三男20李四416R002张三女35417R003李四男30416R004王五男20417R005马六男40416R006刘三男20417R007王四男40李四416R008李小龙男20李四417R009王小倩男40李四416R010王一小男20李四417book表中数据BNOBNAMEBAUTHORBPRESSBPRICEB002数据结构唐发根北航出版社24B003数据库原理王珊高等教育出版社40B004数据库原理张飞清华大学出版社30B005数据库原理王珊清华大学出版社B001数据结构严蔚敏清华大学出版社RB表中数据RNOBNORBDATE(实验时间)R001B001插入数据时的系统时间R001B002R001B004R002B001R003B001R004B001R004B002R005B001R006B001R006B003R006B005R006B002R006B004以下为查询READER表中创建的约束类型,其中constraint_type为约束类型,该属性值的取值Type Code如下表所示。(可以根据上课所讲的实体完整性、参照完整性、用户自定义完整性理解以下约束类型;直接在SQL DEVELOPER中双击表格也可以查看在表上所建立的约束)select table_name,constraint_name,constraint_type from user_constraints where table_name ='READER'Type CodeType DescriptionActs On LevelCCheck on a tableColumnORead Only on a viewObjectPPrimary KeyObjectRReferential AKA Foreign KeyColumnUUnique KeyColumnVCheck Option on a viewObject1、 执行insert into RB(RNO,BNO) values('R010','B005');2、 写出删除Reader表格中编号为R010的员工,如果执行错误,分析错误原因。3、 想办法删除Reader中的R010员工;方法一:先把RB中所有R010的借书记录都删掉方法二:修改数据表READER的结构,允许级联删除(注:ORACLE不支持级联更新)。4、 为Reader表添加一个属性列“出生年份”,名为Rbirthday,整数;5、 对于Reader表格,员工编号可以确定年龄,年龄又可以确定出生年份,因此存在传递函数依赖关系,删除Rbirthday列,使关系模式符合第三范式要求;6、 修改Reader表格的Raddress属性,使其长度为50,数据类型不变;7、 修改book表的Bprice属性,使其值得范围在10到100之间;8、 修改Reader表的Rage属性,使其值得范围为16到60之间。9、 试试是否可以删除Reader表,使用CASCADE是否可以删除?10、 删除Reader、Book和RB表。索引的建立与删除1、 重新执行前面的代码创建三个数据表并插入数据;2、 为Reader表格的Rname建立UNIQUE索引如何修改表格数据,再建索引?3、 删除索引。视图1、 如果上面的运行是在CC的连接中,则需要回到在sysdba 的连接中,执行:grant resource, connect, DBA to cc;否则系统显示没有创建视图的权限。执行完之后再回到CC的连接:在ORACLE SQL Developer 的左上方: 2、 建立在416办公室工作的视图V416,视图包括员工的编号、姓名、年龄等信息3、 从V416中查询年龄大于30的员工信息4、 向视图V416中插入一条新的员工记录,然后从V416中查找该条记录,测试是否可以找到;插入成功了吗?为什么通过视图插入的纪录在视图中看不见?5、 建立在417办公室工作的视图V417,视图包括员工的编号、姓名、性别、年龄等信息,视图定义带with check option选项;6、 向视图V417中插入一条新的员工记录,然后从V417中查找该条记录,测试是否可以找到;7、 通过视图删除刚插入的员工记录,在基本表Reader中查看是否已经删除成功?8、 在视图V417上建立所有女员工信息的视图FV417,查询视图结果9、 删除视图V417中没有借阅图书的员工信息10、 建立视图GV,数据包括每本图书的编号及其借阅数量。思考是否可以向GV中插入数据,为什么?11、 删除视图V417五、实验过程原始记录(实验过程、数据、图表、计算等)1,2连接数据库按指导书代码执行完毕。3、删除同名数据库按指导书书代码执行完毕,问:为何要先删去RB?能不能先删去READER?答:因为RB引用了READER的RNO作为外码,所以,要先删去RB,才能删去READER。create table Reader( RNOvarchar2(4) primary key, Rnamevarchar2(10) not null, Rsexvarchar2(2), Rageinteger, Rbossvarchar2(10), Raddressvarchar2(30) ;4、insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R001','张三',20,'男','李四','416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R002','张三',35,'女',null,'417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R003','李四',30,'男',null,'416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R004','王五',20,'男',null,'417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R005','马六',40,'男',null,'416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R006','刘三',20,'男',null,'417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R007','王四',40,'男','李四','416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R008','李小龙',20,'男','李四','417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R009','王小倩',40,'男','李四','416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R010','王一小',20,'男','李四','417');5、select Rnamefrom readerwhere (rboss='李四');6、UPDATE readerset Raddress='420'where rboss='李四'7、DELETE FROM readerWHERE rboss is NULL;8、DROP TABLE Reader;9、10、create table Reader( RNO varchar2(4) primary key, Rname varchar2(10) not null, Rsex varchar2(3), Rage integer, Rboss varchar2(10), Raddress varchar2(30);insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R001','张三',20,'男','李四','416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R002','张三',35,'女',null,'417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R003','李四',30,'男',null,'416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R004','王五',20,'男',null,'417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R005','马六',40,'男',null,'416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R006','刘三',20,'男',null,'417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R007','王四',40,'男','李四','416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R008','李小龙',20,'男','李四','417');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R009','王小倩',40,'男','李四','416');insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R010','王一小',20,'男','李四','417');create table reader2 as select * from reader;desc reader; desc reader2;11、12、update reader set RNO='R001' where Rname='张三'update reader2 set RNO='R001' where Rname='张三'*/insert into reader2(RNO,Rname,Rsex,Rage,Rboss, Raddress) values(null,'lisi',null,null,null,null);drop table reader2;13、create table Book( BNOvarchar2(4), Bnamevarchar2(50) not null, Bauthorvarchar2(50), Bpressvarchar2(50), Bpricenumeric(6,2), primary key(BNO);14、insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B001','严蔚敏','数据结构','清华大学出版社',null);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B002','唐发根','数据结构','北航出版社',24);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B003','王珊','数据库原理','高等教育出版社',40);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B004','张飞','数据库原理','清华大学出版社',30);insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B005','王珊','数据库原理','清华大学出版社',null);15、create table RB( RNO varchar2(4), BNO varchar2(4), RBdate date default sysdate, primary key(RNO,BNO), foreign key (RNO) references Reader(RNO), foreign key (BNO) references Book(BNO);16、17、insert into RB (RNO,BNO) values ('R001','B001');insert into RB (RNO,BNO) values ('R001','B002');insert into RB (RNO,BNO) values ('R001','B004');insert into RB (RNO,BNO) values ('R002','B001');insert into RB (RNO,BNO) values ('R003','B001');insert into RB (RNO,BNO) values ('R004','B001');insert into RB (RNO,BNO) values ('R004','B002');insert into RB (RNO,BNO) values ('R005','B001');insert into RB (RNO,BNO) values ('R006','B001');insert into RB (RNO,BNO) values ('R006','B003');insert into RB (RNO,BNO) values ('R006','B005');insert into RB (RNO,BNO) values ('R006','B002');insert into RB (RNO,BNO) values ('R006','B004');初始化三个表后:delete from reader where RNO='R010'1、delete from reader where RNO='R010'2、delete from RB where RNO='R010'delete from reader where RNO='R010'3、alter table reader add Rbirthday integer;4、alter table reader drop column Rbirthday;5、alter table reader modify Raddress varchar2(50);6、alter table book add constraint ck_bprice check (bprice between 10 and 100);7、alter table Reader add constraint ck_Rage check(Rage between 16 and 60);8、drop table reader cascade 9、drop table reader cascade constraints;drop table book cascade constraints;drop table rb cascade constraints;10、索引的建立与删除create table Reader( RNO varchar2(4) primary key, Rname varchar2(10) not null, Rsex varchar2(2), Rage integer, Rboss varchar2(10), Raddress varchar2(30);1、create table Book( BNO varchar2(4) primary key, Bname varchar2(50) not null, Bauthor varchar2(50), Bpress varchar2(50), Bprice nu