天天看點

Oracle 筆記(十)、視圖、同義詞、序列

一、視圖

    視圖是一條存儲起來的 SELECT 語句,是資料的顯示方式,通過視圖可以限制使用者通路行、列、或更新表内容。

1.1、基表

組成視圖的表稱為基表。在 Oracle 中,不能對有多個基表的視圖進行更新,此類操作可以利用"替換觸發器"完成。

1.2、視圖的更新限制

[WITH CHECK OPTION] 選項可以限制 對視圖更新值 符合 視圖的WHERE條件。

1.3、隻讀限制

[WITH READ ONLY] 選項和 視圖查詢語句包含 GROPU BY/SUM 等聚合函數、DISTINCT 關鍵字時視圖不允許更新。

1.4、檢視視圖内容

DESC user_views;

SELECT text FROM user_views WHERE view_name='V_READ';

一個視圖的例子:

CREATE OR REPLACE VIEW myview AS SELECT * FROM books WHERE price>30 WITH CHECK OPTION; /* 當利用視圖插入一個 price<=30 的資料時會報錯 */

同義詞是一個對象的一個别名,利用同義詞,可以友善的操縱不同使用者模式下的對象,簡化編碼。

使用同義詞之前要確定使用者擁有通路該對象的權限。

當公有對象(公有同義詞)和本地對象具有相同的名稱時,本地對象優先。

● 公有同義詞:DBA建立,所有使用者共同擁有。CREATE PUBLIC SYNONYM ... ● 私有同義詞:使用者建立,使用與該使用者(對象,可被授權)。 CREATE OR REPLACE SYNONYM dept  FOR scott.dept; SELECT * FROM dept;

DESC user_synonyms;

SELECT synonym_name, table_name, table_owner FROM user_synonyms;

    序列是用來生成唯一、連續的整數的資料庫對象。它通常用來自動生成主鍵或唯一鍵。序列可以按升序、降序排列。

序列是一個獨立型事務,不受送出或復原事務影響。

3.1、建立

CREATE SEQUENCE sequence_name   [START WITH integer]            /* 序列起始值,升序預設為最小值,降序預設為最大值 */   [INCREMENT BY integer]        /* 遞增量,預設為 1, */   [MAXVALUE integer | NOMAXVALUE]    /* 最大值,預設為 NOMAXVALUE */   [MINVALUE integer | NOMINVALUE]    /* 最小值,必須小于等于起始值和 小于最大值 */   [CYCLE | NOCYCLE]            /* 序列到達最大值後是否循環,預設為 NOCYCLE 不循環 */   [CACHE integer | NOCACHE];        /* 是否預配置設定序列号,預設緩存20個序列号 */

3.2、通路

  NEXTVAL 僞列:傳回一個新的序列值。

  CURRVAL 僞列:記憶體中最後一次引用 NEXTVAL 的傳回值,也就是序列的目前值。

INSERT INTO t1 VALUES(t1_seq.NEXTVAL, 'aaa');

SELECT t1_seq.CURRVAL FROM dual;

3.3、修改

    序列建立後隻能修改 最大/最小值、增量值、序列号緩存大小,不能修改起始值,并且保證序列最大/最小值符合規則。

3.4、檢視

DESC user_sequences;

SELECT * FROM user_sequences WHERE SEQUENCE_NAME = 'T1_SEQ';

本文轉自 qvodnet 51CTO部落格,原文連結:http://blog.51cto.com/bks2015/1982994