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权限。


图2、3 注册新用户并赋予权限
- 重新以新用户登录数据库

图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)
);
- 各关系输入数据如下:
图书分类(图书分类号,类名)
|
图书分类号 |
类名 |
|
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 设置日期型格式
- 使用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 实验;
(此处将表进行了删除)
- 使用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 实验名称 = '建立数据库';
另外,在本实验中之过程中也有许多对于数据表模式、数据表数据内容的新增、更改、查询和删除操作,进行了大量的练习。
- 试根据下面的完整性约束要求,用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。
这次构建数据库发生了许多低级的错误,给我的警示是,做事要仔细小心,不要冒失冒进,一味的求快可能效率会更低,踏踏实实走好每一步才行。

Oracle数据库实验一建立数据库的更多相关文章
- sql server DDL语句 建立数据库 定义表 修改字段等
一.数据库:1.建立数据库 create database 数据库名;use 数据库名; create database exp1;use exp1; mysql同样 2.删除数据库 drop dat ...
- 数据库---实验四 oracle的安全性和完整性控制
实验内容: (一) 授权 . 以dba用户的身份登陆oracle,创建用户u1+学号后四位,u2+学号后四位. SQL> create user u1_3985 identified by &q ...
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- Oracle【IT实验室】数据库备份与恢复之四:RMAN(备份与恢复管理器)
RMAN是ORACLE提供的一个备份与恢复的工具,可以用来备份和还原数据库文件. 归档日志和控制文件.它也可以用来执行完全或不完全的数据库恢复. RMAN可以由命令行接口或者 OEM的 Backup ...
- Oracle 【IT实验室】数据库备份与恢复之一:exp/imp(导出与导入&装库与卸库)
1.1 基本命令 1. 获取帮助 $ exp help=y $ imp help=y 2. 三种工作方式 (1)交互式方式 $ exp // 然后按提示输入所需要的参数 ...
- ORACLE 数据库概述以及Oracel数据库的安装、卸载、使用
一:Orcale简介 1.发展史 1978年,Orcale诞生 1982年,Orcale3推出了,它是第一个能够运行在大型机和小型机上的关系型数据库 1997年,Orcale公司推出了基于java语言 ...
- Oracle数据库名、实例名、数据库域名、全局数据库名、服务名之间的区别
数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数据库 ...
- oracle 异常关闭操作 导致数据库无法正常关闭 也无法启动
场景描述: 在关闭数据库的时候,命令没有打全,导致数据库没有正常关闭 解决办法: 重新建立个连接,然后切换到oracle用户 执行强制关闭数据库: OK 问题解决,不过生产环境 还是不推荐 shutd ...
- Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)
1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非常 ...
随机推荐
- 谁动了我的奶酪?--java实例初始化的顺序问题
故事背景 有一天,老鼠小白发现了一个奇怪的问题,它的奶酪的生产日期被谁搞丢了,不知道奶酪是否过期,可怎么吃呀? 让我们来看看吧 import java.util.Date;public class C ...
- 树莓派4B 安装CentOS
刚入手了一个树莓派4B替换掉旧的3B搭Nas.吐槽下3B的网卡和USB速度真的太慢. 虽然官方推荐的是Debina,由于习惯了CentOS不想增加学习成本,我还是决定用CentOS. 镜像下载地址:h ...
- Redis 的底层数据结构(SDS和链表)
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.可能几乎所有的线上项目都会使用到 Redis,无论你是做缓存.或是用作消息中间件,用起来很简单方便 ...
- Android集成JPush极光推送
推送原理 参考网址:https://blog.csdn.net/huangli1466384630/article/details/79889473 SDK下载 https://docs.jiguan ...
- 猿类如何捕获少女心--难以琢磨的try-catch
背景故事 影片<金刚>是2005年上映的一部冒险电影,它讲述1933年的美国,一名勇于冒险的企业家及电影制作者,率领摄制队伍到荒岛拍摄,其中包括女主角安及编剧杰克,他们遇到恐龙及当地土著的 ...
- jvm内存溢出问题的定位方法
jvm内存溢出问题的定位方法 今天给大家带来JVM体验之内存溢出问题的定位方法. 废话不多说直接开始: 一.Java堆溢出 测试代码如下: import java.util.*; public cla ...
- 来几道水题 d050: 妳那裡現在幾點了?
减去15即可(注意这个数小于15的情况) 题目:珊珊到了美国犹他州的杨百翰大学之后,文文禁不住对她的思念,常常想打电话给她,却又担心在美国的她是不是在睡觉.好不容易鼓起勇气打通了电话,第一句就先问:「 ...
- C++输入输出常用格式(cin,cout,stringstream)
输入格式 1.cin>>a; 最基本的格式,适用于各种类型.会过滤掉不可见字符例如空格,TAB,回车等 2.cin>>noskipws>>ch[i]; 使用了 no ...
- Elasticsearch(8) --- 聚合查询(Metric聚合)
Elasticsearch(8) --- 聚合查询(Metric聚合) 在Mysql中,我们可以获取一组数据的 最大值(Max).最小值(Min).同样我们能够对这组数据进行 分组(Group).那么 ...
- charles 代理设置
本文参考:charles 代理设置 charles的代理身份配置区域 这里应该没啥好说的了, window/MAXCos proxy 是charles的代理启用开关: 如果你选中,则表示电脑使用cha ...