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就是共有的