視圖,有關視圖的官方解釋是,它是一個基於一個表或多個表的邏輯表,視圖自己不包含任何數據,恩,簡單說就是一張虛擬的表,是一個查詢語句的結果,可是它的數據是從表獲取的,這些表成爲源表或基表。當基表的數據發生變化時,視圖裏的數據一樣發生變化。安全
一般視圖的數據源有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;
若是想要一個能夠更新(這裏的更新是指增長刪除,修改)的視圖,源表應儘可能是單表,不然限制比較多,
以下狀況出如今視圖中,視圖就不容許更新
除了上述以外,還須要考慮基表的一些約束,這些約束對視圖數據的更新都有必定影響,若是須要建立能夠更新的視圖,可使用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]
說明:
例子: 增長
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]