Oracle数据库的视图
使用視圖的優點:
????1.簡化數據操作:視圖可以簡化用戶處理數據的方式。
????2.著重于特定數據:不必要的數據或敏感數據可以不出現在視圖中。
????3.視圖提供了一個簡單而有效的安全機制,可以定制不同用戶對數據的訪問權限。
????4.提供向后兼容性:視圖使用戶能夠在表的架構更改時為表創建向后兼容接口。
創建或修改視圖語法
????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 VIEW view_name
????鍵保留表是理解連接視圖修改限制的一個基本概念。該表的主鍵列全部顯示在視
????圖中,并且它們的值在視圖中都是唯一且非空的。也就是說,表的鍵值在一個連
????接視圖中也是鍵值,那么就稱這個表為鍵保留表。
物化視圖:
????創建物化視圖語法、
????????CREATE?METERIALIZED VIEW view_name
????????[BUILD IMMEDIATE | BUILD DEFERRED ]
????????REFRESH? [FAST|COMPLETE|FORCE]
????????[? ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT
????????(next_time) ]??AS
?????????subquery
????????BUILD IMMEDIATE?是在創建物化視圖的時候就生成數據
????????BUILD DEFERRED?則在創建時不生成數據,以后根據需要再生成數據。
????????默認為 BUILD IMMEDIATE。
????????刷新(REFRESH):指當基表發生了 DML 操作后,物化視圖何時采用哪種
????????方式和基表進行同步。
????????REFRESH?后跟著指定的刷新方法有三種:FAST、COMPLETE、FORCE。
????????FAST 刷新采用增量刷新,只刷新自上次刷新以后進行的修改。
????????(注意:創建增量刷新的物化視圖,必須
??? ????????????create materialized view log on t_address with rowid;
????????????????create materialized view log on t_area with rowid
????????????????1. 創建物化視圖中涉及表的物化視圖日志。
????????????????2. 在查詢語句中,必須包含所有表的 rowid ( 以 rowid 方式建立物化視圖日志 ))
????????COMPLETE 刷新對整 個物化視圖進行完全的刷新。
????????如果選擇 FORCE 方式,則 Oracle 在刷新時會去判 斷是否可以進行快速刷新,
????????如果可以則采用 FAST 方式,否則采用 COMPLETE 的方式。
????????FORCE 是默認的方式。
????????刷新的模式有兩種:ON DEMAND 和 ON COMMIT。ON DEMAND 指需要
????????手動刷新物化視圖(默認)。ON COMMIT 指在基表發生 COMMIT 操作時自動
????????刷新。
????????手動刷新物化視圖代碼:
????????????????begin
????????????????????????DBMS_MVIEW.refresh('物化視圖表名稱','C');
????????????????end;
????????????????或者通過下面的命令手動刷新物化視圖:
???????????????? EXEC DBMS_MVIEW.refresh('物化視圖表名稱','C');
?????????????????注意:此語句需要在命令窗口中執行。
????????????????????C:代表 complete
序列:
????????序列是 ORACLE 提供的用于產生一系列唯一數字的數據庫對象。
????創建序列語法:
????????create sequence 序列名稱
????????通過序列的偽列來訪問序列的值
????????NEXTVAL 返回序列的下一個值
????????CURRVAL 返回序列的當前值
??????? 提取下一個值
?????? 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}];//分配并存入到內存中
刪除序列:
???????DROP SEQUENCE 序列名稱;
索引:
????????索引是用于加速數據存取的數據對象。合理的使用索引可以大大降低 i/o 次
????????數,從而提高數據訪問性能。
????????索引是需要占據存儲空間的,也可以理解為是一種特殊的數據。形式類似于
????????下圖的一棵“樹”,而樹的節點存儲的就是每條記錄的物理地址,也就是我們提
????????到的偽列(ROWID)
普通索引
????????????create index 索引名稱 on 表名(列名);
唯一索引:
????????????如果我們需要在某個表某個列創建索引,而這列的值是不會重復的。這是我們可
????????????以創建唯一索引。
????????????語法
????????????create unique index 索引名稱 on 表名(列名);
復合索引:
????????????語法:
????????????create index 索引名稱 on 表名(列名,列名.....);
反向鍵索引:
????????????應用場景:當某個字段的值為連續增長的值,如果構建標準索引,會形成歪脖子
????????????樹。這樣會增加查詢的層數,性能會下降。建立反向鍵索引,可以使索引的值變
????????????得不規則,從而使索引樹能夠均勻分布。
????????????語法:
????????????create index 索引名稱 on 表名(列名) reverse;
位圖索引:
????????????使用場景:位圖索引適合創建在低基數列上
????????????位圖索引不直接存儲 ROWID,而是存儲字節位到 ROWID 的映射
????????????優點:減少響應時間,節省空間占用
????????????語法:
????????????create bitmap index 索引名稱 on 表名(列名);
?
轉載于:https://www.cnblogs.com/lijingbo/p/7092040.html
總結
以上是生活随笔為你收集整理的Oracle数据库的视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #42
- 下一篇: Mysql基本知识