數據庫視圖的使用

視圖,有關視圖的官方解釋是,它是一個基於一個表或多個表的邏輯表,視圖自己不包含任何數據,恩,簡單說就是一張虛擬的表,是一個查詢語句的結果,可是它的數據是從表獲取的,這些表成爲源表或基表。當基表的數據發生變化時,視圖裏的數據一樣發生變化。安全

一般視圖的數據源有3種:1.單一表的子集 2.多表操做結果集 3.視圖的子集函數

視圖的三個做用: 1.簡化數據   2.使數據更加獨立 3.增長安全性spa

 

視圖的基本語法:it

CREATE  [ OR REPLACE ] [ [NO] FORCE ] ] VIEWio

  [Schema.] VIEW語法

[ (alias,…) inline_constraint(s) ]im

   [out_of_line_constraint(s)]數據

AS SQLQUERY查詢

[ WITH { READ ONLY | CHECK OPTION [CONSTRAINT constraint] } ];集合

 

語法解釋說明:

OR REPLACE :表示新建視圖能夠覆蓋原同名視圖

[NO]FORCE :表示是否強制建立視圖

Schema.view : 視圖所屬方案名稱和視圖自己的名稱

Alias,… inline_constraint(s) : 視圖字段別名和內聯約束

Out_of_line_constraint(s) : 是與inline_constraint(s) 相反的約束聲明

With read only : 只讀視圖,提升安全性

With check option [constraint constraint] : 對視圖增長或修改數據時必須知足子查詢的條件,至關於把子查詢做爲約束條件。(where 條件也做爲約束條件)

 

例子:(單表視圖)

CREATE OR REPLACEVIEW VIEW_TEST

AS

  SELECT ORG_NUM,CUST_ID,ACCT_NUM,ACCT_NAME

    FROM DEPOSIT_INFO

   WHERE CUST_ID LIKE '1%'

WITH READ ONLY

注:多表視圖相比於單表視圖只是SQLQUERY部分是多個表關聯出的數據,基於視圖的視圖則是由另外一個視圖而來,這裏能夠將視圖當作表

 

帶有約束的視圖

CREATE OR REPLACE VIEW VIEW_TEST_QUE

(

ORG_NUM,

CUST_ID, --這個做爲主鍵約束

ACCT_NUM,

ACCT_NAMECONSTRAINT ACCT_NAME_UNQ UNIQUE RELY DISABLE NOVALIDATE,--惟一約束

CONSTRAINT PK_CUST_ID PRIMARY KEY (CUST_ID) RELY DISABLE NOVALIDATE --創建主鍵約束

)

AS

  SELECT ORG_NUM,CUST_ID,ACCT_NUM,ACCT_NAME

    FROM DEPOSIT_INFO

   WHERE CUST_ID LIKE '1%'

WITH CHECK OPTION;

 

  若是想要一個能夠更新(這裏的更新是指增長刪除,修改)的視圖,源表應儘可能是單表,不然限制比較多,

 以下狀況出如今視圖中,視圖就不容許更新

  1. DISTINCT關鍵字
  2. 集合運算或分組函數,如INTERSECT,SUM,MAX,COUNT等函數。
  3. 出現GROUP BY,ORDER BY,MODEL,START WITH等語句
  4. 出現僞列關鍵字,如ROWNUM

除了上述以外,還須要考慮基表的一些約束,這些約束對視圖數據的更新都有必定影響,若是須要建立能夠更新的視圖,可使用INSTEAD OF 觸發器

 

視圖約束的修改:

基本語法結構

 ALTER  VIEW  [schema.]VIEW

Add [CONSTRAINTconstraint_name]

{ UNIQUE (column [,column] …)

 | PRIMARY KEY (column [ ,column ]…)

 | FOREIGN KEY (colum [,column ]…)

     Reference_clause

 | CHECK (condition)

}

[constraint_state]

說明:

  1. add [CONSTRAINT constraint_name ] 爲視圖增長一項約束,能夠帶約束名稱
  2. unique 惟一約束 primary key 主鍵約束 foreign key 外鍵約束 check 檢查約束
  3. constraint_state約束聲明

例子: 增長

   ALTER VIEW VIEW_TEST_QUE

   ADD CONSTRAINT ACCT_NAME_UNQ UNIQUE (ACCT_NAME)

   DISABLE NOVALIDATE;

 

例子:刪除視圖約束

    Alter view [schema.] view drop CONSTRAINTconstraint_name;

視圖的刪除:

    DROP view [schema.] view [cascade CONSTRAINTS]

相關文章
相關標籤/搜索