第一章 视图
1.什么是视图?
- 视图是一个虚拟表
- 视图是由sql查询语句产生的
- 视图真实存在 但是不存储数据
- 视图中的数据 只是对 基表(源数据表) 中的数据的引用
2.视图的作用
- 简化数据操作
- 对特定数据提供一定的安全性
- 提供向后兼容性
3.视图的基本语法
创建视图:
create [or replace] [force] view view_name
as
subquery
[with check option ]
[with read only]
删除视图: drop view 视图名
- or replace 替换已存在的视图
- force 强制创建视图(可以给不存在的数据表创建视图)
- with check option 不能修改视图形成字段的数据
- with read only
注意:
-
简单视图(数据来源只有一个表 没有聚合操作) 中的任意数据都可以进行任意操作
-
with check option 只要不影响我们的非视图数据就可以操作
第二章:物化视图
1.什么是物化视图
物化视图与普通的视图相比的区别是物化视图是建立的副本,它类似于一张表,需要占用存储空间,它是真实存在的,用来提高查询速度,
2.为什么要物化视图
-
加快查询速度
-
数据量变大 视图查询速度比较慢
-
物化视图 查询速度比较快
-
计算前置
3.语法
create materialized view view_name
[build immediate | build deferred ]
refresh [fast|complete|force]
[
on [commit | demand ] | start with (start_time) next
(next_time)
]
as
subquery
- materialized view 物化视图
- build immediate(默认) 创建视图后立刻生成数据
- deferred 创建视图后 等待刷新生成数据
- refresh: 数据刷新方式
- fast:增量更新
- comlpete: 全量更新
- force (默认):先尝试fast,再使用complete
- on :更新时机
- commit :基表只要commit就会更新
- demand(默认):手动方式
begin DBMS_MVIEW.REFRESH('view_test_11'); end;
4.物化视图的增量更新
物化视图通过日志来更新,当物化视图增量更新完毕后日志中的数据就会删除
增量更新语法
-
增量更新的物化视图
-
创建基表的物化视图日志
-
产生物化视图的 sql 必须包含rowid
-
创建日志
create materialized view log on T_ADDRESS with rowid;
物化视图的sql必须包含rowid
select
T_ADDRESS.ROWID as addr_rowid,
T_AREA.ROWID as area_rowid,
T_ADDRESS.ID, T_ADDRESS.NAME, T_AREA.NAME area
from T_ADDRESS
inner join T_AREA on T_ADDRESS.AREAID = T_AREA.ID;
第三章-序列
什么是序列
-
一个可以产生 唯一数字
-
设置起始位置
-
设置增长数量
-
最大值
-
最小值
-
循环
-
-
语法
-
CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n] //递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减 默认是 1 [START WITH n] //开始的值,递增默认是 minvalue 递减是 maxvalue [{MAXVALUE n | NOMAXVALUE}] //最大值 [{MINVALUE n | NOMINVALUE}] //最小值 [{CYCLE | NOCYCLE}] //CYCLE和NOCYCLE 表示当序列的值达到限制值后是否循环。CYCLE代表循环即到达例如最大值后重新从最小值开始 [{CACHE n | NOCACHE}];//定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
-
-
注意点
-
起始值是不能小于最小值的
-
如果没有循环 能取到值 是不能超过最大值的
-
如果有循环 起始从最小值开始
-
cache默认是为20的 循环值是要大于这个值的
-
第四章-同义词
-
对象的别名
-
对象 : 表 序列 视图
-
-
作用
-
私有
-
只能是创建这个同义词的用户使用
-
-
共有
-
所有的用户都可以使用
-
-
给对象起别名 设置为公共的
-
所有人都可以用这个同义词 所有人都不知道原始表名 表的用户
-
-
-
语法
-
create [public] SYNONYM synooym for object;
-
不加public就是私有的
-
加public就是共有的
-