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连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非常 ...
随机推荐
- Docker搭建disconf环境,三部曲之三:细说搭建过程
Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...
- 为什么不建议使用Date,而是使用Java8新的时间和日期API?
Java 8:新的时间和日期API 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法.Java ...
- Go语言基础之指针
区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 Go语言中的函数传参都是值拷贝 ...
- 实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示
最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实际还需要按照类型字段分类统计pv,uv,比如按照date,hour,pv,uv,typ ...
- Spring Cloud(二):服务消费者
创建“服务消费者” 创建一个基础的Spring Boot工程,命名为springboot-consumer,并在pom.xml中引入需要的依赖内容: <dependency> <gr ...
- 调用webservice获取电话号码归属地信息
首先什么是webservice ? 从广义上面讲,任何一个服务器所提供的"数据","内容","方法"等等都可以理解为webservice. ...
- .Net基础篇_学习笔记_第七天_随机数的产生
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- charles 访问控制设置
本文参考:charles 访问控制设置 charles 访问控制设置 access control settings 访问账户设置: 这里可以配置连接到charles时的一些配置: 这个访问控制确定谁 ...
- 使用Hexo搭建个人博客并部署到GitHub或码云上全过程
一.前言 如上图所示:GitHub有Github Pages,而码云也有码云 Pages 1.Github Pages或Gitee Pages是什么呢? Github Pages或者Gitee Pag ...
- iOS 开发中一些 tips
tableView 的 tableHeaderView 高度不正确的问题: func forceRefreshHeader() { let size = headerView.systemLayout ...