中南大学 数据库实验报告

上传人:r****d 文档编号:81420246 上传时间:2022-04-27 格式:DOC 页数:17 大小:453.50KB
返回 下载 相关 举报
中南大学 数据库实验报告_第1页
第1页 / 共17页
中南大学 数据库实验报告_第2页
第2页 / 共17页
中南大学 数据库实验报告_第3页
第3页 / 共17页
点击查看更多>>
资源描述
中南大学数据库原理实验报告学 院: 信息科学与工程学院 班 级: 电子1102 学 号: 0909101329 姓 名: 毛艾力 指导老师: 张祖平 完成时间: 2021.4.27 实验一、熟悉ORALCE环境并练习SQL的定义一、目的与要求本实验主要是熟悉ORACLE的运行环境,在CLIENT端进行联接设置与效劳器联通,进入ORACLE的SQL*PLUS的操作环境,进一步建立表格,并考虑主键,外部键,值约束。二、操作环境硬件:主频2GHz以上效劳器内存2GB以上、硬件空闲2.2GB以上,主频1GHz以上微机,内存1GB以上。软件:WINDOWS XP/2000/2003/或win7/2021等,如操作系统是 SERVER版 可安装ORACLE/9i/10g/11g/12C FOR NT/WINDOWS(注意在32位与64位的区别,可选企业版) 如果Windows非server如XP/win7等,安装时请选择个人版(PERSONAL)三、实验内容1.上机步骤在实验室上机时,一般安装时管理员已设置好.先找到windows中的oracle效劳一般为OracleServiceORCL,如下列图1,启动此效劳,再找到sql*plus所在的位置一般桌面上有如下列图2的程序组有,运行即可进行登录界面.图1 Oracle在计算机系统中的效劳图2称Sql*plus在系统程序组中的位置实验室现有环境操作步骤:通过桌面我的电脑找到管理效劳的入口,如图3,或者通过资源管理器找到管理。图3 通过桌面我的电脑找到管理效劳的入口然后找到效劳,如图4。图4 系统中的效劳再找启动oracle的效劳如图1:(1) 从桌面或在程序中图2执行SQL*PLUS(2) 输入:system/manager(3) 在SQL状态输入建立用户命令:create user username identified by password;其中username与password不要数字开头,用户名username中按规那么加班级学号后缀如:U_11221表示1班学号尾数为1221号的用户。(4) 给用户授权:grant resource,connect to username;(5) 连接用户:connect username/password在SQL就可以建表等操作了2.根据要求建立如下表定义根本表格book_?书与reader_?(读者及lend_?(借阅,关系模式如下:book_?(bno char(10) Primary key, btitle VARCHAR2(32),author VARCHAR2(32),publisher varchar2(32),price number(7,2) 10000reader_?(RNO char(10) primary key, RNAME VARCHAR2(32), sex VARCHAR2(4) 男,女,其它,其他),age number(3),tel varchar2(13),e-mail varchar2(32) 检查邮箱格式的合法性)lend_?(RNO char(10) FOREIGN key, bno char(10) FOREIGN key, BORROWDATE DATE, RETURNDATE/*应还书日期*/ DATE, realRetDate /*实际还书日期*/ date,,PRIMARY KEY(RNO, BNO, BORROWDate),check(RETURNDATE- BORROWDATE=100)注意表的命名规那么3.插入样本数据每个表至少插入10条以上的记录,要求在reader表中要有自己的信息,可以学号为读者号,可以参考教材上的数据。四、思考题:(1) 能否任意改变表的名称? 不能任意改变表名称;虽然可以改变表名称但任意改变表名称后会让其他与之相关的表中出现错误。(2) 能否先删除reader表或book表?不能,要从后往前删;因为reader中的rno和book中的bno是lend表中的外键,要先删除lend表,再删book表和reader表。3能否改变book表中BNO类型与长度,或改变READER表中Rno的类型与长度。不能,会出现列类型与引用的列类型不兼容错误;因为lend表中引用到了bno和rno。(4) 测试主键,外键与值的约束条件。一个表中主键的值不能相同,即book_21606中bno 0119320211只能有一个,不然会违反唯一性约束;外键的值只能是所对应主键有的值,如insert into lend_21606values(0909112313,0119320210,TO_DATE(2021-03-20,yyyy-MM-dd),TO_DATE(2021-05-25,yyyy-MM-dd),TO_DATE(2021-03-30,yyyy-MM-dd);由于reader中BNO中未添加0909112313将会出现五、实验结论(1) 将VARCHAR2(n) 写成varchar2(n )出现提示缺失右括号错误;有的类型可以小写char(n )有的那么必须大写VARCHAR2(n);(2) 定义外键时references少写s出现提示缺失右括号错误;(3) 日期不会输入,通过TO_DATE进行转换。(4) 熟悉了oracle的使用。六、源代码:Create user U_21329 identified by maoaili;Grant resource,connect to u_21329;Connect u_21329/maoaili;Create tablebook_21329(bno char(10) Primary key, btitle VARCHAR2(32),author VARCHAR2(32),publisher varchar2(32),price number(7,2) check (price between 0 and 10000);Create tablereader_21329 (RNO char(10) primary key, RNAME VARCHAR2(32), sex VARCHAR2(4) check (sex in (男,女,其他,其它),age number(3),tel varchar2(13),e_mail varchar2(32) check(e_mail like %_%);Ceate tablelend_21329(RNO char(10) ,FOREIGN key(RNO) references reader_21329(RNO),bno char(10) ,FOREIGN key(bno) references book_21329(bno),BORROWDATE DATE, RETURNDATE/*应还书日期*/ DATE, realRetDate /*实际还书日期*/ date,PRIMARY KEY(RNO, BNO, BORROWDate),check(RETURNDATE- BORROWDATERETURNDATE;update lend_21329set isoverdue=否where realretdatereturndate;select * from book_21329where publisher=中南大学出版社;select * from lend_21329where bno in(select bno from book_21329where publisher=中南大学出版社);delete from lend_21329where bno in(select bno from book_21329where publisher=中南大学出版社);deletefrom book_21329where publisher=中南大学出版社;select * from book_21329where publisher=中南大学出版社;select * from lend_21329where bno in(select bno from book_21329where publisher=中南大学出版社);实验三、视图及权限控制一、目的与要求本实验主要是熟悉在SQL*PLUS环境下进行数据视图及权限控制的操作。二、操作环境同实验一。三、实验内容综合设计与实现批处理实现为每个读者建立用户,并授予connect角色,建立视图并给相应查询权限,让每个员工用自己的用户登录能查询到自己的整个信息与相应的借书信息。 四、实验报告要求1实验内容2调试后的各命令清单3写出在实验过程中遇到的问题及解决方法4要求字迹端正、条理清晰、概念正确五、 实验源代码grant create user to U_21329;grant connect,resource to U_21329 with admin option;select create user u_|substr(reader_21329.RNO,7,4)| identified by p|substr(reader_21329.RNO,7,4)|; from reader_21329;create user u_1329 identified by p1329;create user u_1328 identified by p1328;create user u_1327 identified by p1327;create user u_1326 identified by p1326;create user u_1325 identified by p1325;create user u_1324 identified by p1324;create user u_1323 identified by p1323;create user u_1322 identified by p1322;create user u_1321 identified by p1321;create user u_1320 identified by p1320;create user u_1319 identified by p1319;select grant connect,resource to u_|substr(reader_21329.RNO,7,4)|; from reader_21329;grant connect,resource to u_1329;grant connect,resource to u_1328;grant connect,resource to u_1327;grant connect,resource to u_1326;grant connect,resource to u_1325;grant connect,resource to u_1324;grant connect,resource to u_1323;grant connect,resource to u_1322;grant connect,resource to u_1321;grant connect,resource to u_1320;grant connect,resource to u_1319;create view v_reader as select reader_21329.RNO,reader_21329.RNAME,book_21329.bno,book_21329.btitle,lend_21329.BORROWDATEfrom book_21329,reader_21329,lend_21329where substr(reader_21329.RNO,7,4)=substr(user,3,4) and lend_21329.RNO=reader_21329.RNO and book_21329.bno=lend_21329.bno;select grant select on v_reader to u_|substr(reader_21329.RNO,7,4)|;from reader_21329;grant select on v_reader to u_1329;grant select on v_reader to u_1328;grant select on v_reader to u_1327;grant select on v_reader to u_1326;grant select on v_reader to u_1325;grant select on v_reader to u_1324;grant select on v_reader to u_1323;grant select on v_reader to u_1322;grant select on v_reader to u_1321;grant select on v_reader to u_1320;grant select on v_reader to u_1319;conn u_1329/p1329;select * from U_21329.v_reader;conn u_1328/p1328;select * from U_21329.v_reader;create table storebook_21329(bno char(10) references U_21329.book_21329(bno),sumnum int,remain int);insert into storebook_21329values(0119320211,5,3);insert into storebook_21329values(0119320212,3,3);insert into storebook_21329values(0119320213,3,2);insert into storebook_21329values(0119320214,5,3);insert into storebook_21329values(0119320215,3,3);insert into storebook_21329values(0119320216,5,3);insert into storebook_21329values(0119320217,3,1);insert into storebook_21329values(0119320218,3,3);insert into storebook_21329values(0119320219,5,1);insert into storebook_21329values(0119320210,3,2);insert into storebook_21329values(0119320211,5,1);insert into storebook_21329values(0119320212,5,2);实验四、数据库触发器一、目的与要求本实验主要是熟悉在SQL*PLUS环境下数据库触发器的建立及作用,了解大型数据库编程。二、操作环境同实验一。三、实验内容1先建立表storebook_?(bno,sumnum /*总数*/,remain/*剩余数*/)2建立触发器满足如下需求:插入删除或修改lend_?表中的记录时,将表storebook中的remain /*剩余数*/进行相应的处理,如插入时增减少相应的一本,删除时将增加相应的一本等。如果remail=0时,提示不能再借书。4. 测试与调试触发器四、实验报告要求1实验内容2调试后的程序清单3写出在实验过程中遇到的问题及解决方法4要求字迹端正、条理清晰、概念正确五、实验源代码CREATE or REPLACE TRIGGER tri_del_lendbefore delete or insert on lend_21329 /*借书表增加或删除时触发*/FOR EACH ROW /*每行发生变化时触发1次*/BEGIN if inserting then update storebook_21329 set remain=remain-1 /*每借出一本书时,库存减1*/ where bno=:new.bno; end if; if deleting then update storebook_21329 set remain=remain+1 where bno=:old.bno; end if;end;/*CREATE or REPLACE TRIGGER tri_del_lendbefore delete or insert on lend_21329FOR EACH ROWdeclare remain_now;remain_now int;BEGIN if inserting then update storebook_21329 set remain=remain-1 where bno=:new.bno; end if; if deleting then select remain into remain_now from storebook_21329 where bno=xxy_bno; if remain_now=0 then raise_application_error( -20000, 剩余0本,无法借书); end if; update storebook_21329 set remain=remain+1 where bno=:old.bno; end if;end;*/*触发器2*/CREATE or REPLACE TRIGGER tri_cal_lendbefore update ON storebook_21329FOR EACH ROWBEGIN if :new.remain0 then raise_application_error( -20000, 剩余0本,无法借书); end if;end;insert into lend_21329 /*实例添加数据*/values(0909101318,0119320212,TO_DATE(2021-03-20,yyyy-MM-dd),TO_DATE(2021-05-25,yyyy-MM-dd),TO_DATE(2021-03-30,yyyy-MM-dd);delete from lend_21329where RNO=0909101320 and bno=0119320217;select * from storebook_21329; 实验五、数据库过程一、目的与要求本实验主要是熟悉在SQL*PLUS环境下数据库过程的建立及作用,了解大型数据库编程。二、操作环境同实验一。三、实验内容1先建立表SumLendBook_?(rno,sumnum /*总数*/,sumoverdue/*总过期数*/)2设计并调试过程1分读者编号计算,sumnum /*总数*/,sumoverdue/*总过期数*/,如建立Pro_sumlend_?过程,运行时:Pro Sumlend_?(0909110112);运行结果为:0909110112显示读者的相应统计数值,并存入表SumLendBook中四、实验报告要求1实验内容2调试后的程序清单3写出在实验过程中遇到的问题及解决方法4要求字迹端正、条理清晰、概念正确五、 实验源代码/*创立sumlendbook表*/create table SumLendBook_21329(RNO char(10) references U_21329.reader_21329(RNO),sumnum number,sumoverdue number);/*创立过程*/create or replace procedure Pro_sumlend_21329(s_RNO in varchar)isvin_RNO char(10);v_RNO char(10);v_sumnum number;v_sumoverdue number;begin vin_RNO :=0|s_RNO; select count(lend_21329.bno) into v_sumnum from lend_21329 where RNO=vin_RNO; select count(lend_21329.bno) into v_sumoverdue from lend_21329 where lend_21329.isoverdue=是 and RNO=vin_RNO;insert into SumLendBook_21329values(vin_RNO,v_sumnum,v_sumoverdue);DBMS_OUTPUT.put_line(学号0|vin_RNO|总借书数|v_sumnum|过期数|v_sumoverdue); /*显示输出*/exception /*没数据时*/ when no_data_found then DBMS_OUTPUT.put_line(未找到数据!);end Pro_sumlend_21329;execute Pro_sumlend_21329(0909101329)select reader_21329.RNO,book_21329.bno,lend_21329.BORROWDATE,RETURNdatefrom lend_21329,book_21329,reader_21329 where reader_21329.RNO(+)=lend_21329.RNO and lend_21329.bno=book_21329.bnoorder by reader_21329.RNO;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!