CREATE VIEW

Name

CREATE VIEW -- 定義一個視圖

Synopsis

CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query

描述

CREATE VIEW 定義一個查詢的視圖。 這個視圖不是實際上實際存在(於磁盤)的。具體的說,自動生成一個改寫索引規則(一個 ON SELECT 規則)的查詢用以支援在視圖上的檢索。

CREATE OR REPLACE VIEW 類似,不過是如果一個同名的視圖已經存在,那麼就替換它。 您只能用一個生成相同字串的新查詢替換一個視圖(也就是說,同樣字串名和資料類型)。

如果給出了一個模式名(比如,CREATE VIEW myschema.myview ...),那麼該視圖是在指定的模式中建立的。 否則它是在目前模式中建立的。 該視圖名字必需和同一模式中任何其它視圖,資料表,序列或者索引的名字不同。

參數

name

所要建立的視圖名稱(可以有模式修飾)。

column_name

一個可選的名字列資料表,用於當作視圖的字串名。如果沒有給出, 字串名取自查詢。

query

一個將為視圖提供行和列的查詢(也就是一條 SELECT 語句)。

請參閱 SELECT 獲取有效查詢的更多訊息。

注意

目前,視圖是只讀的:系統將不允許在視圖上插入,更新,或者刪除資料。 您可以透過在視圖上建立把插入等動作重寫為向其它資料表做合適操作的規則來實現可更新視圖的效果。 更多訊息詳見 CREATE RULE

使用 DROP VIEW 語句刪除視圖。

請注意視圖字串的名字和類型不一定是您們期望的那樣。比如,

CREATE VIEW vista AS SELECT 'Hello World';

在兩個方面很糟糕:字串名預設是 ?column?,並且字串的資料類型預設是 unknown。 如果您想視圖的結果是一個字串文本,那麼用類似下面這樣的東西

CREATE VIEW vista AS SELECT text 'Hello World' AS hello;

對視圖引用的資料表的訪問的權限由視圖的所有者決定。 不過,在視圖裡調用的函數當作他們直接從使用視圖的查詢裡調用看待。 因此,視圖的用戶必須有使用視圖調用的所有函數的權限。

例子

建立一個由所有喜劇電影組成的視圖:

CREATE VIEW kinds AS
    SELECT *
    FROM films
    WHERE kind = 'Comedy';

相容性

SQL 標準為 CREATE VIEW 聲明了一些附加的功能:

CREATE VIEW name [ ( column [, ...] ) ]
    AS query
    [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]

完整的SQL命令可選的子句是:

CHECK OPTION

這個選項用於可更新視圖。 所有對視圖的INSERTUPDATE都要經過視圖定義條件的檢驗。 (也就是說,新資料應該可以透過視圖看到。)如果沒有透過檢驗,更新將被拒絕。

LOCAL

對這個視圖進行完整性檢查。

CASCADE

對此視圖和任何相關視圖進行完整性檢查。 在既沒有聲明 CASCADE 也沒有聲明 LOCAL 時,假設為 CASCADE

CREATE OR REPLACE VIEWPostgreSQL 的擴展。

又見

DROP VIEW