Oracle数据库入门
1. 数据库概述
1.1 数据库介绍
什么是数据库?
- 数据库,简单来说,就是存放数据的 “仓库”。
在日常生活中,我们会有各种各样的数据,比如家里的购物清单、学校的学生成绩、公司的客户信息等。数据库就像是一个超级大柜子,把这些数据按照一定的规则整理好,存放在里面,方便我们查找和使用。
数据库可以做什么?
- 数据存储:数据库最基本的功能就是存储数据。无论是文字、数字、图片,还是音频、视频等各种类型的数据,都可以存储在数据库中。比如,一家电商网站需要存储大量的商品信息,包括商品名称、价格、描述、图片等,这些数据就可以存放在数据库里。
- 数据管理:数据库可以帮助我们管理数据。它可以对数据进行分类、排序、筛选等操作。例如,学校的教务系统,要管理学生的选课信息,通过数据库就能很方便地查看某个学生选了哪些课程,某个课程有哪些学生选修等。
- 数据查询:这是数据库非常重要的一个功能。我们可以根据自己的需求,从数据库中快速查询到想要的数据。比如,我们在搜索引擎上搜索信息,搜索引擎其实就是在后台的数据库中进行查询,然后把相关的结果展示给我们。再比如,在一个员工信息数据库中,我们想知道所有年龄在 30 岁以上的员工,通过数据库的查询功能,就能很快得到结果。
- 数据更新和修改:如果数据发生了变化,我们可以在数据库中对其进行更新和修改。比如,商品的价格调整了,我们就可以在电商网站的数据库中修改商品的价格信息。
- 数据共享:数据库允许多个用户同时访问和使用其中的数据。比如,公司的不同部门可以同时从公司的数据库中获取自己需要的数据,实现数据的共享,提高工作效率。
- 数据备份和恢复:为了防止数据丢失,数据库可以进行数据备份。当出现意外情况,如电脑故障、病毒攻击等导致数据丢失时,可以从备份中恢复数据。就像我们会定期备份手机里的照片和联系人信息,以防手机丢失或损坏后数据丢失。
总之,数据库在我们的生活和工作中无处不在,它帮助我们更好地管理和利用数据,让我们能够快速、准确地获取所需信息,为各种业务和应用提供了强大的支持。
数据库要怎么使用呢?
简单来讲就是需在计算机中安装一个数据库的软件,通过这个软件可以将数据保存在软件下的某些文件中,然后我们通过一门专业的语言(SQL)可以高效的对文件中的数据进行增删改查的操作。

在现今的行业中,数据库的种类有很多,各自的数据库也有其独特的特性。

MySQL数据库
- 最早是瑞典一家公司开发的,后来被sun公司收购,再后来被oracle公司收购。开源且免费,但是mysql从5.6版本之后出现了两种版本:一种的社区版本(免费),一种是企业版(收费)。
Oracle数据库
- oracle公司的代表产品,闭源且付费,多应用于政府、银行、电商等项目。
DB2数据库
- IBM公司的产品,闭源且付费,早起多应用于金融行业。
SqlServer数据库
- 微软旗下的产品,闭源且付费,仅能应用在windows平台的操作系统上。
1.2 关系型数据库
在正式学习Oracle数据库之前,需要先了解一个概念:关系型数据库(RDBMS)。
概念:建立在关系模型基础之上,由多张相互连接的二维表组成的数据库。
而所谓二维表,指的是由行和列组成的表,如下图:

二维表的优点:
-
使用表存储数据,格式统一,便于维护
-
使用SQL语言操作,标准统一,使用方便,可用于复杂查询
之前提到的
MySQL、Oracle、DB2、SQLServer这些都是属于关系型数据库,里面都是基于二维表存储数据的。结论:基于二维表存储数据的数据库就成为关系型数据库。
2. Oracle数据库
2.1 什么是Oracle
Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品。
Oracle通常应用于大型系统的数据库产品。Oracle在海量存储、高性能、高并发、安全性方面都相当不错。
Oracle数据库具有以下特点:
1)支持多用户、大事务量的事务处理(支持大并发、大访问量)
2)数据安全性和完整性控制(金融行业对安全性要求比高,通常使用ORACLE)
3)支持分布式数据处理
4)可移植性
MySQL和ORACLE的区别:
1、MySQL属于轻量级数据库(中小型数据库);Oracle属于重量级数据库(大型数据库)
2、MySQL是免费开源;Oracle是商业级的数据库(收费、提供技术支持)
个人观点:MySQL是实用很好用,oracle就是很好很强大
2.2 Oracle体系结构
1、数据库
Oracle数据库是数据的物理存储集合(各种物理文件的集合)。包括数据库文件ORA或DBF、控制文件、联机日志、参数文件。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大数据库。
2、实例
实例:数据库启动时初始化的一组进程和内存结构。
在启动数据库并使用数据库的时候,实际上是连接到该数据库的实例,通过实例来连接、使用数据库。
在启动数据库时,Oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个实例(instance),然后由该实例装载、打开数据库,最后由这个实例来访问和控制数据库的各种物理结构。一个数据库可以有n个实例。

3. SQL简介
前面我们提到过使用SQL语言来管理和操作数据库。那什么是SQL呢?
SQL(Structured Query Language):结构化查询语言。
SQL是一门操作关系型数据库的编程语言,通过 SQL可以实现与数据库的通信,可以执行CRUD等操作。
- CRUD是指增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)
SQL语言相对其他编程类语言来讲简单易学、使用方便、且功能强大。
数据开发人员通过编写SQL程序,来向数据库执行CRUD等操作。
3.1 通用语法
在学习具体的SQL语句之前,先来了解一下SQL语言的通用语法:
-
SQL语句可以单行或多行书写,以分号结尾。
1 2 3 4 5 6
-- 把SQL语句写在一行 SELECT * FROM student; -- 把SQL语句写在多行 SELECT * FROM student;
-
可使用空格和缩进来增强语句的可读性。
-
SQL语句不区分大小写,但在开发中关键字通常使用大写。
1 2 3
select * from student; -- 通常建议:关键字使用大写 SELECT * FROM student;
-
SQL语句中有两种注释:
-
单行注释: – 注释内容
1 2
-- SQL语句单行注释(仅对当前行有效) SELECT * FROM teacher;
-
多行注释: /* 注释 */
1 2 3 4 5 6
/* 多行 注释 内容 */ SELECT * FROM student;
-
3.2 SQL分类
在Oracle中SQL语句根据其功能被分为五大类:DDL、DML、DQL、DCL 、DTL
| 分类 | 全称 | 说明 |
|---|---|---|
| DDL | Data Definition Language | 数据定义语言。Oracle用来定义数据表,列等。 |
| DML | Data Manipulation Language | 数据操作语言。用来对数据库表中的数据进行增删改。 |
| DQL | Data Query Language | 数据查询语言。用来查询数据库中表的记录。 |
| DCL | Data Control Language | 数据控制语言,用来操作用户和权限。 |
| DTL | Data Transaction Language | 数据事务语言。用来操作事务。 |
4. Oracle安装
4.1 挂载Oracle虚拟机
1 2 3 4 5 6 7 8 9 10 11 提供的虚拟机 => host: yzd ip: 192.168.105.129 Linux系统信息: user : root pwd : 123456 --------------------------- Oracle数据库信息: 管理员账户:sys 密码:123456 sid : orcl user : yzd pwd : 123456 port : 1521
步骤1:在VMware中选择”文件” -> “打开”

步骤2:找到提供的Oracle虚拟机

步骤3:挂载完成后,点击”开启此虚拟机”

步骤4:如有弹出提示窗体,点击”我已复制该虚拟机”

步骤5:等待虚拟机中的linux系统启动….
步骤6:修改linux中的网络为静态ip地址
1
2
3
4
5
# 第1步: 查看Linux系统网络ip
ip addr # 确认自己的ip地址是多少
# 第2步: 打开并修改网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
-
效果图如下(仅供参考):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" # 设置IP方式:静态IP 或 动态IP DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="58485d82-b73a-4505-8efb-42ae6fc379de" DEVICE="ens33" ONBOOT="yes" # 开机时是否启用此网络
1
2
3
4
5
6
7
8
9
# 第3步: 修改网络配置文件中的内容(参考)
BOOTPROTO="static" # 设置为:静态IP方式
ONBOOT="yes" # 设置为:开机时启用此网络
IPADDR=192.168.200.128 # 设置为:自己linux系统的ip地址(之前自己 ip addr 查看到的ip)
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.200.2 # 设置默认网关地址
# 第4步: 重启网络服务
systemctl restart network
步骤7:修改主机名和ip的映射
1
2
3
4
5
vim /etc/hosts
-------- 修改hosts文件 --------
# 自己的IP地址 主机名
192.168.200.128 yzd
4.2 使用客户端远程连接Oracle
说明:提前安装客户端DBeaver
1
2
# 在linux系统中查看Oracle数据库是否启动
ps -ef | grep pmon # 查看数据库实例是否运行。 如有ora_pmon_orcl的进程表示Oracle已启动
步骤1:创建新连接

步骤2:选择”Oracle数据库”

步骤3:下载Oracle驱动文件

步骤4:配置Oracle数据库连接参数

忽略弹出的警告

连接成功:

步骤5:测试成功后,点击”完成”


5. 项目案例介绍
5.1 项目介绍与需求分析
XXX市自来水公司为更好地对自来水收费进行规范化管理,决定委托开发《自来水公司收费系统》。考虑到自来水业务数量庞大,数据并发量高,决定数据库采用ORACLE数据库。主要功能包括:
1、基础信息管理:
(1)业主类型设置
(2)价格设置
(3)区域设置
(4)收费员设置
(5)地址设置
2、业主信息管理:
(1)业主信息维护
(2)业主信息查询
3、收费管理:
(1)抄表登记
(2)收费登记
(3)收费记录查询
(4)欠费用户清单
4、统计分析:
(1)收费日报单
(2)收费月报表
5.2 表结构设计

1、业主类型表 : t_ownertype
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| NAME | VARCHAR2(30) | 是 | 类型名称 |
2、价格表 :t_pricetable
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| PRICE | NUMBER(10,2) | 是 | 价格 |
| OWNERTYPEID | NUMBER | 是 | 业主类型ID |
| MINNUM | NUMBER(10,2) | 是 | 区间数开始值 |
| MAXNUM | NUMBER(10,2) | 是 | 区间数截止值 |
3、区域表 :t_area
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| NAME | VARCHAR2(30) | 是 | 区域名称 |
4、收费员表 :t_operator
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| NAME | VARCHAR2(30) | 是 | 操作员名称 |
5、地址表 :t_address
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| NAME | VARCHAR2(30) | 是 | 地址名称 |
| AREAID | NUMBER | 是 | 区域ID |
| OPERATORID | NUMBER | 是 | 操作员ID |
6、业主表 :t_owners
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| NAME | VARCHAR2(30) | 是 | 业主名称 |
| ADDRESSID | NUMBER | 是 | 地址ID |
| HOUSENUMBER | VARCHAR2(30) | 是 | 门牌号 |
| WATERMETER | VARCHAR2(30) | 是 | 水表编号 |
| ADDDATE | DATE | 是 | 登记日期 |
| OWNERTYPEID | NUMBER | 是 | 业主类型ID |
7、收费账单 :t_account
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| OWNERID | NUMBER | 是 | 业主编号 |
| OWNERTYPEID | NUMBER | 是 | 业主类型 |
| AREAID | NUMBER | 是 | 所在区域 |
| YEAR | CHAR(4) | 是 | 账务年份 |
| MONTH | CHAR(2) | 是 | 账务月份 |
| NUM0 | NUMBER | 上月累计数 | |
| NUM1 | NUMBER | 本月累计数 | |
| USENUM | NUMBER | 本月使用数 | |
| METERUSERID | NUMBER | 抄表员 | |
| METERDATE | DATE | 抄表日期 | |
| MONEY | NUMBER(10,2) | 应缴金额 | |
| ISFEE | CHAR(1) | 是 | 是否缴费 |
| FEEDATE | DATE | 缴费日期 | |
| FEEUSERID | NUMBER | 收费员 |
上述7张表的数据模型如下:

6. 创建项目中数据表
在ORACLE中,创建表之前需要先创建表空间,再创建用户,并把创建的表空间给用户(如果未给指定表空间,默认使用系统的SYSTEM表空间)。

6.1 表空间
在Oracle数据库中,创建表之前需要先创建表空间(数据表会归属于某个表空间下)。
什么是表空间呢?
- 在 Oracle 里,表空间就好比是一个大仓库,用来存放各种数据。比如说,你有很多不同类型的东西要存放,像衣服、书籍、玩具等,你就可以把不同类型的东西放在仓库的不同区域,这样找起来方便,管理也容易。表空间也是这个道理,它可以把数据库中的数据按照不同的用途或性质,存放在不同的 “区域” 里。比如,你可以把公司员工的信息放在一个表空间里,把公司产品的信息放在另一个表空间里。
表空间的作用和价值:
- 数据管理更有条理。就像仓库分区能让你快速找到想要的东西一样,表空间能让数据库管理员很容易地找到和管理特定的数据。
- 提高数据库的性能。通过合理分配不同类型的数据到不同表空间,数据库可以更高效地读取和写入数据,就好像你把常用的东西放在容易拿到的地方,用的时候就能很快拿到一样。
- 增强数据的安全性。你可以对不同的表空间设置不同的访问权限,比如有些表空间只有特定的人才能看或者修改,这样就能保护数据不被随意访问和破坏啦。
创建表空间语法: tablespace是表空间关键字
1
2
3
4
5
6
-- 标准语法结构(照着模板格式写即可)
CREATE TABLESPACE waterboss
DATAFILE '/home/oracle/waterboss.dbf' -- 物理文件存储路径
SIZE 10m -- 初始化物理文件大小
AUTOEXTEND ON -- 物理文件存储不足时会自动扩容
NEXT 10m -- 自动扩容大小为10M
- 解释:
waterboss为表空间名称datafile用于设置物理文件名称size用于设置表空间的初始大小autoextend on用于设置自动增长,如果存储量超过初始大小,则开始自动扩容next用于设置扩容的空间大小
表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。
表空间的大小等于构成该表空间的所有数据文件大小之和。
删除表空间:
1
2
3
4
5
-- 删除表空间(但不会删除表空间下的数据文件)
DROP TABLESPACE waterboss;
-- 删除表空间并且删除表空间下的数据文件
DROP TABLESPACE waterboss INCLUDING CONTENTS AND DATAFILES;
修改表空间:
1
2
3
4
5
6
7
8
9
10
11
12
-- 修改表空间
ALTER DATABASE
DATAFILE '/home/oracle/waterboss.dbf'
AUTOEXTEND ON
NEXT 20M
MAXSIZE 2G
-- 修改原有的数据文件大小
alter database datafile '/home/oracle/waterboss.dbf' resize 50M;
-- 为表空间增加新的数据文件
alter tablespace 表空间名 add datafile 数据文件 size 大小
查看Oracle下的表空间:
1
SELECT * FROM DBA_TABLESPACES;
- 查询结果:
SYSTEM、SYSAUX、TEMP、UNDOTBS1、USERS- SYSTEM是系统表空间,存放系统的最基本的信息,如果SYSTEM表空间坏掉,Oracle将无法启动
- SYSAUX从10g中引入,作为SYSTEM的辅助表空间,用以减少SYSTEM表空间的负荷 。以前其他表空间中的一些组件,现在放到SYSAUX表空间中了
- TEMP是临时表空间,当排序不能在分配的空间中完成时,就会使用磁盘排序的方式,即在Oracle实例中的临时表空间中进行
- UNDOTBS1是撤销表空间(回滚),是UNDO类型的表空间,保存用户进行DML操作中,修改前的数据
- USERS是数据库默认的永久表空间
6.2 创建用户
创建用户的语法: create user是创建用户的关键字
1
CREATE USER wateruser DEFAULT TABLESPACE waterboss IDENTIFIED BY 123456
- 说明:
wateruser为创建的用户名identified by用于设置用户的密码default tablesapce用于指定默认表空间名称
创建完ORACLE用户后,登录时发现:无法登录,权限不足。
删除用户:
1
DROP USER 用户名 CASCADE;
查看用户归属的表空间:
1
2
3
4
-- 说明:Oracle数据库关键字不区分大小写, 但表中的数据是区分大小写的。
SELECT username, default_tablespace FROM dba_users WHERE username = 'WATERUSER';
-- 在oracle中有一些管理数据库相关信息的表: dba_xxxx 、user_xxxx
6.3 用户授权
ORACLE在创建用户后,新创建的用户不具备操作数据库的权限(例:登录权限),需要给用户授权。
1
2
3
GRANT dba TO wateruser ; -- 把数据库中的DBA权限授予指定的用户
GRANT CREATE SESSION, CREATE TABLESPACE,CREATE TABLE TO 用户;
- 给用户wateruser赋予DBA权限后即可登陆
ORACLE中将权限分为两类:
-
系统权限:系统规定用户使用数据库的权限(系统权限是对用户而言)
- 系统权限提供了用户在整个DBMS中执行操作的能力,会影响到整个数据库系统的安全
-
对象权限:是指赋予用户在特定数据库对象执行特定操作的能力(是针对表或视图而言的)
-
数据库对象包括:数据表、视图、字段、序列等
语法:
GRANT 对象权限[,对象权限,…] ON 用户名.对象 TO 用户
-
6.4 创建表
建表语法:
1
2
3
4
5
CREATE TABLE 表名称 (
字段名 数据类型(长度) [约束] [默认值],
字段名 数据类型(长度) [约束] [默认值],
.......
)tablespace 表空间名;
示例:创建业主表
| 字段名 | 类型(位数) | 是否必填 | 说明 |
|---|---|---|---|
| ID | NUMBER | 是 | 主键 |
| NAME | VARCHAR2(30) | 是 | 业主名称 |
| ADDRESSID | NUMBER | 是 | 地址ID |
| HOUSENUMBER | VARCHAR2(30) | 是 | 门牌号 |
| WATERMETER | VARCHAR2(30) | 是 | 水表编号 |
| ADDDATE | DATE | 是 | 登记日期 |
| OWNERTYPEID | NUMBER | 是 | 业主类型ID |
1
2
3
4
5
6
7
8
9
10
CREATE TABLE t_owners
(
id NUMBER PRIMARY KEY , -- 业主编号
name VARCHAR2(30), -- 业主名称
addressid NUMBER, -- 地址id
housenumber VARCHAR2(30), -- 门牌号
watermeter NUMBER, -- 水表编号
adddate DATE, -- 登记日期
ownertypeid NUMBER -- 业主类型id
)TABLESPACE waterboss; -- 创建表时指定表空间
6.5 数据类型
在Oracle中需要给存储的数据需要指定具体的类型,称为数据类型。
数据类型的划分:
-
字符型
- CHAR : 固定长度的字符类型,最多存储2000个字节
- VARCHAR2 :可变长度的字符类型,最多存储4000个字节
- LONG : 大文本类型。最大可以存储2个G
-
数值型
-
NUMBER : 数值类型
1 2
NUMBER(5) -- 最大可以存的数为99999 NUMBER(5,2) -- 最大可以存的数为999.99
-
-
日期型
- DATE:日期时间型,精确到秒。
- MySQL中:日期是
date(年月日)、日期时间是datetime(年月日时分秒)
- MySQL中:日期是
- TIMESTAMP:精确到秒的小数点后9位
- DATE:日期时间型,精确到秒。
-
二进制型(大数据类型)
- CLOB : 存储字符,最大可以存4个G
- BLOB:存储图像、声音、视频等二进制数据,最多可以存4个G
现在开发中的作法:把图像、声音、视频文件存储到文件服务器中(例:云存储服务器OSS)。数据表中的字段存储的是文件的URL。