1. 程式人生 > >Oracle數據庫的視圖

Oracle數據庫的視圖

dml 權限 rom 而是 option 並且 下一個 數據訪問 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 表名(列名);

Oracle數據庫的視圖