?
This document uses PHP Chinese website manual Release
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW name [ ( column_name [, ...] ) ] AS query
CREATE VIEW定義一個查詢的視圖。這個視圖不是物理上實際存在的, 并且在該視圖每次被引用的時候都會運行一次query。
CREATE OR REPLACE VIEW類似,不過是如果一個同名的視圖已經存在,那么將替換它。 新查詢必須生成現(xiàn)有視圖查詢產生的相同列(這就是說,同列名有相同的順序和相同的 數(shù)據(jù)類型),但會添加額外的列到列表末。產生輸出列的運算可能是完全不同的。
如果給出了一個模式名(比如CREATE VIEW myschema.myview ...),那么該視圖將在指定的模式中創(chuàng)建, 否則將在當前模式中創(chuàng)建。臨時視圖存在于一個特殊的模式里,所以創(chuàng)建臨時視圖的時候, 不用給出模式名。新視圖名字必需和同一模式中任何其它視圖、表、序列、索引的名字不同。
如果聲明了這個子句,那么視圖就以臨時視圖的方式創(chuàng)建。 臨時視圖在當前會話結束的時候將被自動刪除。當前會話中,在臨時視圖存在的期間, 將無法看到現(xiàn)有的同名關系,除非用模式修飾的名字引用它們。
如果視圖引用的任何基礎表是臨時的,那么視圖將被創(chuàng)建為臨時的(不管是否聲明了TEMPORARY)。
所要創(chuàng)建的視圖名稱(可以有模式修飾)
一個可選的名字列表,用作視圖的字段名。如果沒有給出,字段名取自查詢。
一個將為視圖提供行和列的SELECT或 VALUES 語句。
目前,視圖是只讀的:系統(tǒng)將不允許在視圖上插入、更新、刪除數(shù)據(jù)。 你可以通過在視圖上創(chuàng)建把插入等動作重寫為向其它表做合適操作的規(guī)則來實現(xiàn)可更新視圖的效果。 更多信息詳見CREATE RULE。
使用DROP VIEW語句刪除視圖。
請注意視圖字段的名字和類型不一定是你們期望的那樣。比如,
CREATE VIEW vista AS SELECT 'Hello World';
在兩個方面很糟糕:字段名缺省是?column?并且字段的數(shù)據(jù)類型缺省是unknown。 如果你想視圖的結果是一個字符串文本,那么請像下面這樣使用:
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
對視圖引用的表的訪問的權限由視圖的所有者決定。 在一些情況下,這可以用于提供安全,但限制訪問地層表。 然而,并不是所有的視圖是防止篡改的;參閱 Section 37.4 獲取詳細信息。在視圖里調用的函數(shù)當作他們直接從使用視圖的查詢里調用看待。 因此,視圖的用戶必須有使用視圖調用的所有函數(shù)的權限。
當CREATE OR REPLACE VIEW用于現(xiàn)有視圖,只有視圖的定義SELECT 規(guī)則更改。其他試圖屬性,包括所屬關系、許可權限和non-SELECT規(guī)則, 保持不變。你必須擁有視圖來替換它(這包括成為所屬關系的一員)。
創(chuàng)建一個由所有喜劇電影組成的視圖:
CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';
SQL標準為CREATE VIEW聲明了一些附加的功能:
CREATE VIEW name [ ( column_name [, ...] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
完整的SQL命令可選的子句是:
這個選項用于可更新視圖。所有對視圖的INSERT和UPDATE都要經過視圖定義條件的校驗。 也就是說,新數(shù)據(jù)應該可以通過視圖看到。如果沒有通過校驗,更新將被拒絕
對這個視圖進行完整性檢查。
對此視圖和任何相關視圖進行完整性檢查。 在既沒有聲明CASCADED也沒有聲明LOCAL時,假設為CASCADED。
CREATE OR REPLACE VIEW是PostgreSQL的擴展。 臨時視圖的概念也是擴展。