- ORACLE 简介
- 什么是 ORACLE
ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或
B/S 体系结构的数据库之一。
ORACLE 通常应用于大型系统的数据库产品。
ORACLE 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个
完备关系的产品;作为分布式数据库它实现了分布式处理功能。
ORACLE 数据库具有以下特点:
(1)支持多用户、大事务量的事务处理
(2)数据安全性和完整性控制
(3)支持分布式数据处理
(4)可移植性
-
- ORACLE 体系结构
- 数据库
- ORACLE 体系结构
Oracle 数据库是数据的物理存储。 这就包括(数据文件 ORA 或者 DBF、控 制文件、联机日志、参数文件)。其实 Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle 就只有一个大数据库。
-
-
- 实例
-
一个Oracle 实例(Oracle Instance)有一系列的后台进程(Backguound Processes) 和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例。
-
-
- 数据文件(dbf)
-
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后, 就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才
行。
-
-
- 表空间
-
表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻 辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在 逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为 system 表空间)。
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件
(datafile)。一个数据文件只能属于一个表空间。
注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。
由于 oracle 的数据库不是普通的概念,oracle 是有用户和表空间对数据进行 管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用
户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!
-
-
- 用户
-
用户是在表空间下建立的。用户登陆后只能看到和操作自己的表, ORACLE
的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户。
- ORACLE 安装与配置
- 安装虚拟机
正常下一步即可
注意 安装 d盘/opt目录下, 这个目录没有中文没有空格
-
-
- 在vm中配置网关
-
-
-
- 修改 windows 的网卡信息
-
-
- 扫描已安装oracle的windows11系统
将压缩包解压到 没有中文没有空格的目录下.
-
- oracle已安装
检测oracle是否正常
这四个服务, 必须是正在运行才可以.
-
- PLSQL (oracle的客户端)
系统用户: system 密码: Aa123456
system
Aa123456
orcl
- 准备数据 来源: 项目案例《自来水公司收费系统》
- 项目介绍与需求分析
XXX 市自来水公司为更好地对自来水收费进行规范化管理,决定委托传智 播客.黑马程序员开发《自来水公司收费系统》。考虑到自来水业务数量庞大,
数据并发量高,决定数据库采用 ORACLE 数据库。主要功能包括:
1.、基础信息管理:
(1)业主类型设置
(2)价格设置
(3)区域设置
(4)收费员设置
(5)地址设置
2、业主信息管理:
(1)业主信息维护
(2)业主信息查询
3、收费管理:
(1)抄表登记
(2)收费登记
(3)收费记录查询
(4)欠费用户清单
4、统计分析
(1)收费日报单
(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 | NUMBER | 是 | 门牌号 |
| 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 | | 收费员 |
-
- 创建表空间
|-------------------------------------------------------------------------------------------------|
| create tablespace waterboss datafile 'C:\data\waterboss.dbf' size 100m autoextend on next 10m |
解释:
waterboss 为表空间名称
datafile 用于设置物理文件名称
size 用于设置表空间的初始大小
autoextend on 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next 用于设置扩容的空间大小
-
- 创建用户
|----------------------------------------------------------------------------|
| create user c##wateruser identified by itcast default tablespace waterboss |
wateruser 为创建的用户名
identified by 用于设置用户的密码
default tablesapce 用于指定默认表空间名称
-
- 用户赋权
|---------------------------|
| grant dba to c##wateruser |
给用户 wateruser 赋予 DBA 权限后即可登陆
-
- 切换用户 c##wateruser
- 表的创建、修改与删除
- 创建表
语法:
|------------------------------------------------------------------|
| CREATE TABLE 表名称( 字段名 类型(长度) primary key, 字段名 类型(长度), ....... ); |
数据类型:
- 字符型
(1)CHAR : 固定长度的字符类型,最多存储 2000 个字节
(2)VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节
(3)LONG : 大文本类型。 最大可以存储 2 个 G
2.数值型
NUMBER : 数值类型
例如:NUMBER(5) 最大可以存的数为 99999
NUMBER(5,2) 最大可以存的数为 999.99
3.日期型
(1)DATE:日期时间型,精确到秒
(2)TIMESTAMP:精确到秒的小数点后 9 位
4.二进制型(大数据类型)
(1)CLOB : 存储字符,最大可以存 4 个 G
(2)BLOB:存储图像、声音、 视频等二进制数据,最多可以存 4 个 G
实例:
创建业主表
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| create table t_owners ( id number primary key, name varchar2(30), addressid number, housenumber varchar2(30), watermeter varchar2(30), adddate date, ownertypeid number ); |
其它表的创建见资料"自来水收费系统建表语句.sql "
-
- 修改表
-
增加字段语法:
|-------------------------------------------------------------------------|
| ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型 [DEFAULT 默认值]...) |
为业主表增加两个字段,语句:
|----------------------------------------------------------------------------|
| -- 追加字段 ALTER TABLE t_owners ADD ( REMARK VARCHAR2(20), OUTDATE DATE ) |
- 修改字段语法:
|----------------------------------------------------------------------------|
| ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型 [DEFAULT 默认值]...) |
修改两个字段的类型,语句:
|---------------------------------------------------------------------------------|
| -- 修改字段 ALTER TABLE t_owners MODIFY ( REMARK CHAR(20), OUTDATE TIMESTAMP ); |
- 修改字段名语法:
|------------------------------------------|
| ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名 |
语句:
|---------------------------------------------------------|
| ALTER TABLE t_owners RENAME COLUMN OUTDATE TO EXITDATE; |
- 删除字段名
|--------------------------------------------------------------------------------------|
| --删除一个字段 ALTER TABLE 表名称 DROP COLUMN 列名 --删除多个字段 ALTER TABLE 表名称 DROP (列名 1,列名 2...) |
语句:
|-------------------------------------------------|
| --删除字段 ALTER TABLE t_owners DROP COLUMN REMARK; |
-
- 删除表
语法:
|----------------|
| DROP TABLE 表名称 |
- 数据增删改
- 插入数据
语法:
|---------------------------------------------------------|
| INSERT INTO 表名[(列名 1,列名 2 ,...)] VALUES(值 1,值 2 ,...) |
执行 INSERT 后一定要再执行 commit 提交事务
向业主表插入数据:
|---------------------------------------------------------------------------|
| insert into T_OWNERS VALUES (1,'张三丰',1,'2-2','5678',sysdate, 1, sysdate); |
语句中的 sysdate 是系统变量用于获取当前日期,点击齿轮的图标后,再点击下
图的绿色图标,此图标为 commit
我们再次录入一条数据,语句如下:
|----------------------------------------------------------------------------------------|
| INSERT INTO t_owners VALUES (4, '赵大侃', 1, '2-3', '9876', SYSDATE, 1, SYSDATE); commit; |
-
- 修改数据
语法:
|--------------------------------------------------|
| UPDATE 表名 SET 列名 1=值 1,列名 2=值 2 ,....WHERE 修改条件; |
执行 UPDATE 后一定要再执行 commit 提交事务
需求:将 ID 为 1 的业主的登记日期更改为三天前的日期
|---------------------------------------------------|
| update T_OWNERS set adddate=adddate-3 where id=1; |
-
- 删除数据
语法 1 :
|----------------------------|
| DELETE FROM 表名 WHERE 删除条件; |
执行 DELETE 后一定要再执行 commit 提交事务
需求:删除业主 ID 为 2 的业主信息
|-------------------------------------------------------------------------------------------|
| |------------------------------------------| | delete from t_owners where id=4; commit; | |
语法 2:
|--------------------|
| TRUNCATE TABLE 表名称 |
比较 truncat 与 delete 实现数据删除?
-
delete 删除的数据可以 rollback
-
delete 删除可能产生碎片,并且不释放空间
-
truncate 是先摧毁表结构,再重构表结构