1- 什么是视图
视图是一个虚拟表
视图是由sql查询语句产生的
视图真实存在 但是不存储数据
视图中的数据 只是对 基表(源数据表) 中的数据的引用
总的来说 视图可以简化数据
用户,订单,物流 三个表进行关联 吧很复杂的sql查询语句存储成一个视图
获取结果就可以直接查询视图 不用再重复的进行sql查询
并且提供一定的安全性 以及 向后兼容性
视图你可以理解为 从原来的很多表中 select出你需要的几个字段信息进行查询 并且形成视图
无需重复查询,通过原表select出视图 。并且可以通过原表同步数据到t2表格
如果删除原表 则视图也无法查询
语法格式:
create [or replace] [force] view view_name
as
subquery
[with check option ]
[with read only]
or replace
替换已存在的视图
force
强制创建视图(可以给不存在的数据表创建视图)
with check option
不能修改视图形成字段的数据
with read only
只读不能进行数据修改
with check option的作用
简单视图 中的任意数据都可以进行任意操作
with check option 只要不影响我们的非视图数据就可以操作
with read only
视图不能进行任何的dml操作(增删改)
or replace
替换原有的视图
force
作用
创建一个没有源数据表的视图
删除视图
drop view 视图名
2-复杂视图
定义
多表 聚合函数 子查询 等
注意
不要dml操作 很容易出错
3-物化视图
什么是物化视图
视图 是不会存储数据的
物化视图 是真实存储数据
为什么要物化视图
加快查询速度
数据量变大 视图查询速度比较慢
物化视图 查询速度比较快
meger on read
meger on write <<加快数据同步>>
语法格式
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(默认)
创建视图后 立马生成数据
build deferred
创建视图后 等待刷新生成数据
refresh : 数据刷新
fast : 增量更新
complete : 全量更新
force (默认方式)
尝试使用fast更新
再去使用全量更新
on (确定更新时机)
commit : 基表只要commit就会开始更新
demand : 手动方式(刷新) (默认的)
物化视图的增量更新
增量更新语法
增量更新的物化视图
创建基表的物化视图日志
产生物化视图的 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;
4-序列
什么是序列
一个可以产生 唯一数字
设置起始位置
设置增长数量
最大值
最小值
循环
序列语法格式
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的 循环值是要大于这个值的
5-同义词
对象的别名
对象 : 表 序列 视图
作用
私有
只能是创建这个同义词的用户使用
共有
所有的用户都可以使用
给对象起别名 设置为公共的
所有人都可以用这个同义词 所有人都不知道原始表名 表的用户
语法格式
create [public] SYNONYM synooym for object;
不加public就是私有的
加public就是共有的