Oracle基础教程(四)ORACLE 对象

四 ORACLE 对象

4.1 视图

视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视 图所对应的数据并不真正地存储在视图中,而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。

视图的创建

CREATE [OR REPLACE] [FORCE] VIEW view_name 
AS subquery 
[WITH CHECK OPTION ] 
[WITH READ ONLY]
  • OR REPLACE:若所创建的试图已经存在,
  • ORACLE 自动重建该视图;
  • FORCE :不管基表是否存在 ORACLE 都会自动创建该视图;
  • subquery :一条完整的 SELECT 语句,可以在该语句中定义别名;
  • WITH CHECK OPTION:插入或修改的数据行必须满足视图定义的约束;
  • WITH READ ONLY:该视图上不能进行任何 DML 操作。

视图的删除:drop

DROP VIEW 视图名

带检查约束的视图:with check option

create or replace view view_address2 as
select * from T_ADDRESS where areaid=2
with check option

只读视图:with read only

create or view view_owners1 as
select * from T_OWNERS where ownertypeid=1
with read only

带错误的视图:force

create or view force view_owners1 as
select * from T_OWNERS where ownertypeid=1

复杂视图:,就是视图的 SQL 语句中,有聚合函数或多表关联查询

create or replace view view_owners as
select o.id 业主编号,o.name 业主名称,ot.name 业主类型
from T_OWNERS o,T_OWNERTYPE ot 
where o.ownertypeid=ot.id
  • 键保留表

键保留表是理解连接视图修改限制的一个基本概念。该表的主键列全部显示在视 图中,并且它们的值在视图中都是唯一且非空的。也就是说,表的键值在一个连 接视图中也是键值,那么就称这个表为键保留表。

4.2 物化视图

视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集。每次访问它都会导致这个查询语句被执行一次。为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个物化视图(也叫实体化视图。 物化视图与普通的视图相比的区别是物化视图是建立的副本,它类似于一张表,需要占用存储空间。而对一个物化视图查询的执行效率与查询一个表是一样 的。

  • 物化视图的创建
CREATE METERIALIZED VIEW view_name
[BUILD IMMEDIATE | BUILD DEFERRED ]
REFRESH [FAST|COMPLETE|FORCE]
[
ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT
(next_time)
]
AS
sql语句
  • 参数解释
    • METERIALIZED:是在创建物化视图的时候就生成数据
    • BUILD DEFERRED:则在创建时不生成数据,以后根据需要再生成数据。 默认为 BUILD IMMEDIATE
    • REFRESH:FAST:增量更新,COMPLETE:完全刷新,FORCE:自动选择(默认)
    • 刷新的模式有两种:ON DEMANDON COMMITON DEMAND 指需要 手动刷新物化视图(默认)。ON COMMIT指在基表发生 COMMIT 操作时自动 刷新。

手动刷新物化视图

create materialized view mv_address 
as
select ad.id,ad.name adname,ar.name ar_name 
from t_address ad,t_area ar 
where ad.areaid=ar.id
  • 当我们插入一条数据后
insert into t_address values(8,'宏福苑小区',1,1);
  • 手动刷新
begin
DBMS_MVIEW.refresh('MV_ADDRESS','C');
end;

自动刷新物化视图 refresh on commit

create materialized view mv_address2 
refresh 
on commit
as
select ad.id,ad.name adname,ar.name ar_name 
from t_address ad,t_area ar 
where ad.areaid=ar.id

创建此物化视图后,当 T_ADDRESS 表发生变化时,物化视图自动跟着改变。

创建时不生成数据 build deferred

create materialized view mv_address3
build deferred 
refresh
on commit
as
select ad.id,ad.name adname,ar.name ar_name 
from t_address ad,t_area ar 
where ad.areaid=ar.id;
  • 第一次查询,没有数据,需要手动刷新
begin
DBMS_MVIEW.refresh('MV_ADDRESS3','C');
end;

创建增量刷新的物化视图 refresh fast

  • 如果创建增量刷新的物化视图,必须首先创建物化视图日志
create materialized view log on t_address with rowid;
create materialized view log on t_area with rowid
  • 创建物化视图
    • 创建物化视图中涉及表的物化视图日志。
    • 在查询语句中,必须包含所有表的rowid( 以 rowid方式建立物化视图日志
create materialized view mv_address4
refresh fast
as
select ad.rowid adrowid ,ar.rowid arrowid, ad.id,ad.name 
adname,ar.name ar_name 
from t_address ad,t_area ar 
where ad.areaid=ar.id;

4.3 序列

序列是 ORACLE 提供的用于产生一系列唯一数字的数据库对象。

序列的创建

create sequence 序列名称
  • 获取下一个值
select 序列名称.nextval from dual
  • 获取当前值
select 序列名称.currval from dual

复杂序列

CREATE SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减 默
认是 1
[START WITH n] //开始的值,递增默认是 minvalue 递减是 maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
create sequence seq_test1 
increment by 10
start with 10
maxvalue 300
minvalue 5

修改序列

ALTER SEQUENCE 序列名称 MAXVALUE 5000 CYCLE

删除序列

DROP SEQUENCE 序列名称

4.4 同义词

  • 同义词实质上是指定方案对象的一个别名。通过屏蔽对象的名称和所有者以 及对分布式数据库的远程对象提供位置透明性,同义词可以提供一定程度的安全 性。同时,同义词的易用性较好,降低了数据库用户的 SQL 语句复杂度。 同义词允许基对象重命名或者移动,这时,只需对同义词进行重定义,基于同义 词的应用程序可以继续运行而无需修改。 你可以创建公共同义词和私有同义词。其中,公共同义词属于 PUBLIC 特殊 用户组,数据库的所有用户都能访问;而私有同义词包含在特定用户的方案中, 只允许特定用户或者有基对象访问权限的用户进行访问
  • 其中 synonym 表示要创建的同义词的名称,object 表示表,视图,序列等我们要 创建同义词的对象的名称。

语法

create [public] SYNONYM synooym for object;
create synonym OWNERS for T_OWNERS;

4.5 索引

  • 索引是一种高效的数据结构
  • 索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低 i/o 次 数,从而提高数据访问性能
  • 索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于 下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提 到的伪列(ROWID)

创建索引

create index 索引名 on 表名(字段)

唯一索引 如果列中的数据是唯一的,我们可以创建唯一索引,来提升查询效率

create unique index 索引名称 on 表名(列名);

复合索引

create index 索引名称 on 表名(列名,列名.....)

反向键索引 将二进制反转,在转换为10进制,达到随机分布的目的

create index 索引名称 on 表名(列名) reverse;

位图索引 基于有限的个数建立图索引

create bitmap index 索引名称 on 表名(列名)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安不及十里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值