Oracle数据库实验一建立数据库

期:   2019 年  09 月  24  日

实验报告日期:   2019  年  09 月  28 日

一、      实验目的

熟悉oracle环境;

熟练掌握和使用PL-SQL建立数据库基本表。

使用PL/SQL developer操作数据库。

熟练掌握SQL 建立关系,及增删改数据。

二、      实验环境

Windows10专业版

Oracle database 11g

PL/SQL Developer 13

三、      实验内容

了解SQL PLUS的使用

使用PL/SQL developer的图形界面,建立图书管理数据库orcl中的各个关系

在建立的关系中输入有效数据

删除以上各关系

在PL/SQL developer用SQL代码建立orcl数据库中各关系

用SQL 代码完成数据增、删、改

四、      实验步骤

  • 以SYSTEM登录数据库

打开PL/SQL developer,以用户:SYSTEM,密码:orcl,登录orcl数据库,如图1所示:

图1 登录数据库

  • 注册用户

打开Users文件夹,新建用户。用户名:S512017****,密码定为orcl,并赋予connect和dba权限。

23 注册新用户并赋予权限

  • 重新以新用户登录数据库

图4 以新用户登录数据库

  • 建立数据库表

打开tables文件夹。建立以下各关系:

图书分类(图书分类号,类名)

书目(ISBN, 书名,作者,出版单位,单价,图书分类号)

图书(图书编号,ISBN,是否借出,备注)

读者 (借书证号,姓名,单位,性别,地址,联系电话,身份证编号)

借阅 (借阅流水号,借书证号,图书编号,借书日期,归还日期,罚款分类号,备注)

罚款分类(罚款分类号,罚款名称,罚金)

预约 (预约流水号,借书证号,ISBN,预约时间)

(1)       图形界面下建立:

图5 设定表名

图6 设定表的属性列

图7 设置表的主键

图书分类表建立完成,其余各表的建立同理可建,如下(第一张为表名的设置(Name),接着是模式的设置(Columns),键的设置(Keys),约定条件的设置(Check),如果没有则是不需要定义相关项):

书目:

图书:

读者:

借阅:

罚款分类:

预约:

(2)       由SQL语句建立:

图书分类:

create table 图书分类(

图书分类号  varchar2(3) primary key,

类名     varchar2(10) not null

);

书目:

create table 书目(

ISBN   varchar2(20) primary key,

书名     varchar2(20) not null,

作者     varchar2(20) not null,

出版单位 varchar2(30),

单价   number(10,2),

图书分类号  varchar2(3),

foreign key(图书分类号) references 图书分类(图书分类号)

);

图书:

create table 图书(

图书编号   varchar2(7) primary key,

ISBN   varchar2(20),

是否借出   varchar2(2),

备注     varchar2(60),

foreign key(ISBN) references 书目(ISBN),

check (是否借出 = '是' or 是否借出 = '否')

);

读者:

create table 读者(

借书证号   varchar2(8) primary key,

姓名     varchar2(10) not null,

单位     varchar2(30),

性别     varchar2(2),

地址     varchar2(30),

联系电话   char(11),

身份证编号  varchar2(18),

check (性别 in ('男','女')),

check (regexp_like(联系电话,'[0-9]{11}')),

check (regexp_like(身份证编号,'[0-9]{15}')

or regexp_like(身份证编号,'[0-9]{17}[0-9,X]'))

);

借阅:

create table 借阅(

借阅流水号  number primary key,

借书证号   varchar2(8) not null,

图书编号   varchar2(8) not null,

借书日期   date not null,

归还日期   date,

罚款分类号 number,

备注    varchar2(60),

foreign key(借书证号) references 读者(借书证号),

foreign key(图书编号) references 图书(图书编号)

);

罚款分类:

create table 罚款分类(

罚款分类号  number primary key,

罚款名称   varchar2(8) not null,

罚金     number not null

);

预约:

create table 预约(

预约流水号  number primary key,

借书证号   varchar2(8),

ISBN   varchar2(20),

预约时间   date not null,

foreign key(借书证号) references 读者(借书证号),

foreign key(ISBN) references 书目(ISBN)

);

  1. 各关系输入数据如下:

图书分类(图书分类号,类名)

图书分类号

类名

100

文学

200

科技

300

哲学

书目(ISBN, 书名,作者,出版单位,单价,图书分类号)

ISBN

书名

作者

出版单位

单价

图书分类号

7040195836

数据库系统概论

王珊

高等教育出版社

39.00

200

9787508040110

红楼梦

曹雪芹

人民出版社

20.00

100

9787506336239

红楼梦

曹雪芹

作家出版社

34.30

100

9787010073750

心学之路

张立文

人民出版社

33.80

300

图书(图书编号,ISBN,是否借出,备注)

图书编号

ISBN

是否借出

备注

2001231

7040195836

2001232

7040195836

1005050

9787506336239

1005063

9787508040110

3007071

9787010073750

读者 (借书证号,姓名,单位,性别,地址,联系电话,身份证编号)

借书证号

姓名

单位

性别

地址

联系电话

身份证编号

20051001

王菲

四川绵阳西科大计算机学院

..

20062001

张江

四川绵阳中心医院

..

20061234

郭敬明

四川江油305

..

..

..

20071235

李晓明

四川成都工商银行

..

..

..

20081237

赵鑫

四川广元广元中学

..

..

..

借阅 (借阅流水号,借书证号,图书编号,借书日期,归还日期,罚款分类号,备注)

借阅流水号

借书证号

图书编号

借书日期

归还日期

罚款分类号

备注

1

20081237

3007071

2010/09/19

2010/09/20

2

20071235

1005063

2010/10/20

2011/02/20

1

3

20071235

2001232

2011/09/01

4

20061234

1005063

2011/9/20

5

20051001

3007071

2011/9/10

6

20071235

1005050

2011/10/20

2012/02/20

1

罚款分类(罚款分类号,罚款名称,罚金)

罚款分类号

罚款名称

罚金

1

延期

10

2

损坏

20

3

丢失

50

预约 (预约流水号,借书证号,ISBN,预约时间)

预约流水号

借书证号

ISBN

预约时间

1

20081237

9787508040110

2011/09/11

(1)      对于各表内容的图形化插入:

如“图书分类”表的编辑:首先右键点击表格选择“Edit data”,如下图:

在所给窗口中编辑数据,如下:

接着点选绿勾、绿锁并点击commit按钮,则提交成功

其余各表的数据插入如下:

书目:

图书:

读者:

借阅:

罚款分类:

预约:

(2)      SQL语句插入:

/*图书分类*/

insert into 图书分类 values('100','文学');

insert into 图书分类 values('200','科技');

insert into 图书分类 values('300','哲学');

/*书目*/

insert into 书目(ISBN,书名,作者,出版单位,单价,图书分类号) values ('7040195836','数据库系统概论','王珊','高等教育出版社',39.00,'200');

insert into 书目(ISBN,书名,作者,出版单位,单价,图书分类号) values ('9787508040110','红楼梦','曹雪芹','人民出版社',20.00,'100');

insert into 书目(ISBN,书名,作者,出版单位,单价,图书分类号) values ('9787506336239','红楼梦','曹雪芹','作家出版社',34.30,'100');

insert into 书目(ISBN,书名,作者,出版单位,单价,图书分类号) values ('9787010073750','心学之路','张立文','人民出版社',33.80,'300');

/*图书*/

insert into 图书(图书编号,ISBN,是否借出) values('2001231','7040195836','否');

insert into 图书(图书编号,ISBN,是否借出) values('2001232','7040195836','是');

insert into 图书(图书编号,ISBN,是否借出) values('1005050','9787506336239','否');

insert into 图书(图书编号,ISBN,是否借出) values('1005063','9787508040110','是');

insert into 图书(图书编号,ISBN,是否借出) values('3007071','9787010073750','是');

/*读者*/

insert into 读者 values('20051001','王菲','四川绵阳西科大计算机学院','女','','','');

insert into 读者 values('20062001','张江','四川绵阳中心医院','男','','','');

insert into 读者 values('20061234','郭敬明','四川江油305','男','','','');

insert into 读者 values('20071235','李晓明','四川成都工商银行','男','','','');

insert into 读者 values('20081237','赵鑫','四川广元广元中学','女','','','');

/*罚款分类*/

insert into 罚款分类(罚款分类号,罚款名称,罚金) values(1,'延期',10);

insert into 罚款分类(罚款分类号,罚款名称,罚金) values(2,'损坏',20);

insert into 罚款分类(罚款分类号,罚款名称,罚金) values(3,'丢失',50);

/*借阅*/

insert into 借阅(借阅流水号,借书证号,图书编号,借书日期,归还日期) values(1,'20081237','3007071',to_date('2010/09/19','yyyy/mm/dd'),to_date('2019/09/20','yyyy/mm/dd'));

insert into 借阅(借阅流水号,借书证号,图书编号,借书日期,归还日期,罚款分类号,备注) values(2,'20071235','1005063',to_date('2010/10/20','yyyy/mm/dd'),to_date('2011/02/20','yyyy/mm/dd'),1,'');

insert into 借阅(借阅流水号,借书证号,图书编号,借书日期) values(3,'20071235','2001232',to_date('2011/09/01','yyyy/mm/dd'));

insert into 借阅(借阅流水号,借书证号,图书编号,借书日期) values(4,'20061234','1005063',to_date('2011/9/20','yyyy/mm/dd'));

insert into 借阅(借阅流水号,借书证号,图书编号,借书日期) values(5,'20051001','3007071',to_date('2011/9/10','yyyy/mm/dd'));

insert into 借阅(借阅流水号,借书证号,图书编号,借书日期,归还日期,罚款分类号,备注) values(6,'20071235','1005050',to_date('2011/10/20','yyyy/mm/dd'),to_date('2012/02/20','yyyy/mm/dd'),1,'');

/*预约*/

insert into 预约(预约流水号,借书证号,ISBN,预约时间) values(1,'20081237','9787508040110',to_date('2011/09/11','yyyy/mm/dd'));

另外,对于plsqldev时间格式的设定如下:

8 设置日期型格式

  1. 使用SQL语句练习表的创建、删除、修改操作。

新建一个“实验”表,进行表的创建、删除、修改的操作:

创建表:

create table 实验(

实验编号   varchar2(5) primary key,

实验名称   varchar2(30) not null

);

select * from 实验;

修改:

alter table 实验

modify 实验名称 varchar2(40);

select * from 实验;

(此处“实验名称”变量类型变为varchar2(40))

alter table 实验

add 实验难度 varchar2(2);

select * from 实验;

删除:

alter table 实验

drop column 实验名称;

select * from 实验;

drop table 实验;

(此处将表进行了删除)

  1. 使用SQL语句练习表中数据的增加、删除、修改操作。

以上题所建实验(实验编号(primary key),实验名称(not null),实验难度)表进行操作。

create table 实验(

实验编号   varchar2(5) primary key,

实验名称   varchar2(30) not null,

实验难度   varchar2(2)

);

数据插入:

insert into 实验 values('19001','建立数据库','中');

insert into 实验(实验名称,实验编号) values('删库跑路','19002');

结果查看:

数据修改:

update 实验 set 实验编号 = '19003'

where 实验名称 = '删库跑路';

数据删除:

delete from 实验

where 实验名称 = '建立数据库';

另外,在本实验中之过程中也有许多对于数据表模式、数据表数据内容的新增、更改、查询和删除操作,进行了大量的练习。

  1. 试根据下面的完整性约束要求,用SQL对上面已经建立好的数据库表进行完整性约束定义。

读者关系中属性  联系电话  取值为11位数字

                身份证编号  取值为18位,并且满足身份证编号规则

图书关系中属性 是否借出  取值为:‘是’或‘否’

借阅关系中属性 借书日期  取值不为空

完整性约束如下:

读者关系中:

电话号码约束:使第一位为1其余10位为数字。

check (regexp_like(联系电话,'^1[0-9]{10}$'))

         身份证约束:(第一个约束条件使身份证第1位不为0,第7到10位使身份证信息中的出生年份为1900到2099,第11到12位组合为月份01到12月份,且分别分出了31和30天的月份,再使2月份的天数为29天,最后一位约定可以为x和X;第二个约束条件使出生年份不超过2019年)

check (regexp_like(idc,'^[1-9]\d{5}(19|20)\d{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2]\d|30|31)|(04|06|09|11)(0[1-9]|[1-2]\d|30)|02(0[1-9]|[1-2]\d))\d{3}(\d|x|X)$')

and regexp_like(idc,'^\d{6}((19\d{10})|(20(0|1)\d{9}))$'))

 

图书关系中:

    check (是否借出 = '是' or 是否借出 = '否')

借阅关系中:

借书日期   date not null

实验心得与体会

本次实验是第一次实验课,在实验之前我们需要准备好软件平台,Oracle database的安装需要顾及到相应支持的软件,如.Net Framework 3.5,以及相应注册表的修改(使数据库兼容在Windows10上),再按照自己的需求进行软件的安装。在软件使用的过程中,我们至少需要简单了解相关服务项控制的是什么,才能更加方便的使用,为了创建数据库以及使用SQL语句的便捷性,和与实验室环境搭配,我们也使用的pl/sql development软件,用图形界面的方法方便我们对数据库的相关操作。

实验中图形化界面的使用弄懂了之后,编辑起来是很快,但是总会有一些报错,由于宏观操作数据,并不能很直观的知道到底是哪里出了问题,在之后的SQL语句创建数据库创建表的过程中,相当于重复着之前的行为,这时候再微观的构建数据库中便能更加直观的发现自己之前的错误,加深了自己的印象,自己也发现有没有理解透彻的知识点,回头翻书再仔细咀嚼一番,掌握的也更扎实了。

在数据库构建的时候,主键和外键的设置在我看来显得尤为重要,再加上完整性约束,三者在数据库健壮性中显得格外突出。我在实验中便经过了很多相关的坎,从未设置约束和外键,到完善约束条件,其中感悟心得挺多的:当你数据插入报错时,有可能是违反唯一性原则,反复插入了相同主键的数据;有可能是插入的数据外键指向的主键指定的表中找不到,不存在或者之前插入的值并没有commit。

这次构建数据库发生了许多低级的错误,给我的警示是,做事要仔细小心,不要冒失冒进,一味的求快可能效率会更低,踏踏实实走好每一步才行。

(0)

相关推荐

  • 潍坊当年的图书馆,你还记得吗

    潍坊图书馆,最早在白浪河东岸,和潍坊文化馆南北相邻,后来拆迁,搬到潍坊高专那里,再后来就搬到现在北海路的位置至今. 记得以前在图书馆办过借书证,经常去借书.后来搬到高专时,由于借书证还没有到期,可以继 ...

  • 【审计实务】基于大数据思维的医院收费审计思路与技巧

    来源:山东省审计厅网站,转载用作学习,如有问题,请及时联系我们.另转载请注明来源! 随着药品零差率等一系列医改举措的持续推进,当前各医院的药占比等指标持续下降,收入结构也随之发生变化,医疗服务收费较以 ...

  • 数据库约束有什么作用?Linux运维MySQL数据库

    数据库是存储数据的仓库,由数据库表组成.数据库本质是一个文件系统,数据库以特定的格式存储数据,用户可以添加.修改.删除和查询数据库中的数据.对于运维工作者或者数据库工作者来说,数据库约束是学习数据库相 ...

  • Python|论数据库表的建立及设计原则

    问题描述 在本内容将阐述怎样在Navicat for MySQL中建立数据库表及说明其设计原则. 解决方案 1.数据库表的建立 第一步:用户安装好MySQL和Navicat for MySQL后,打开 ...

  • 多组学!还自带动物和临床实验!这个数据库可以封神了!做科研不可错过!来掘金了!

    ▌数据库概览 网址(http://www.bigzju.com/ATdb/#/Homepage),Human Autophagy Database数据库简称ATdb,整合来自TCGA.GEO数据库肿瘤 ...

  • 【竺】数据库笔记7——Mysql数据库备份

    *. mysql -u username -p password: 这个命令用于输入用户名和密码登陆mysql服务器: *.show databases;:用于查看mysql服务器中的数据库情况(会罗 ...

  • 中文科技期刊数据库[中文科技期刊数据库]

    <中文科技期刊数据库>源于重庆维普资讯有限公司1989年创建的<中文科技期刊篇名数据库>,其全文和题录文摘版一一对应,经过13年的推广使用和完善.全文版的推出受到国内广泛赞誉, ...

  • 关系型数据库与非关系型数据库

    关系型数据库: 1.定义: 创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据 2.关系模型常用概念: (1)关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通 ...

  • 【乐都区】海东携手故宫博物院 建立瞿昙寺壁画数据库

    海东日报讯(记者 陶成君)近日,海东市乐都区瞿昙寺数字化保护项目第一期成果在北京故宫博物院发布.为弘扬及保护藏传佛教文化及文物,省文物考古研究所.乐都区文化旅游部门与故宫博物院.北京故宫文物保护基金会 ...

  • 2021年4月Oracle数据库补丁分析报告

    引言 编写目的 编写此文档为了更好地指导Oracle补丁安装工作,细化工作任务,规范安装升级操作. 背景 Oracle对于其产品每个季度发行一次安全补丁包CPU (Critical Patch Upd ...

  • Oracle 11g数据库安装(包含PLSQL)

    一.虚拟机环境搭建 1.下载VMvare虚拟机安装包,安装虚拟机,并在虚拟机中加装Win Server 2012 服务器环境: 2.如果大家装的是英文版的winserver2012环境,可以在控制面板 ...

  • oracle数据库整理笔记

    表格:infos1  infos2 insert into infos1(stuid,stuname,gender,age,seat,stuaddress,classno) values(2,'张三' ...