<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # CREATE VIEW ## Name CREATE VIEW?--?定義一個新視圖 ## Synopsis ``` CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW _name_ [ ( _column_name_ [, ...] ) ] [ WITH ( _view_option_name_ [= _view_option_value_] [, ... ] ) ] AS _query_ ``` ## 描述 `CREATE VIEW`定義一個查詢的視圖。 這個視圖不是物理上實際存在的,并且在該視圖每次被引用的時候都會運行一次查詢。 `CREATE OR REPLACE VIEW`類似,不過如果一個同名的視圖已經存在, 那么將替換它。新查詢必須生成與現有視圖查詢生成的字段相同的字段(也就是, 相同的字段名字,相同的順序和相同的數據類型),但是可能添加額外的字段到列表的結尾。 該計算導致輸出字段可能完全不同。 如果給出了一個模式名(比如`CREATE VIEW myschema.myview ...`), 那么該視圖將在指定的模式中創建,否則將在當前模式中創建。 臨時視圖存在于一個特殊的模式里,所以創建臨時視圖的時候,不能給出模式名。 新視圖名字必需和同一模式中任何其它視圖、表、序列、索引或外部表的名字不同。 ## 參數 `TEMPORARY` 或 `TEMP` 如果聲明了這個子句,那么視圖就以臨時視圖的方式創建。 臨時視圖在當前會話結束的時候將被自動刪除。當前會話中,在臨時視圖存在的期間, 將無法看到現有的同名關系,除非用模式修飾的名字引用它們。 如果視圖引用的任何基礎表是臨時的,那么視圖將被創建為臨時的 (不管是否聲明了`TEMPORARY`)。 `RECURSIVE` 創建一個遞歸的視圖。語法 ``` CREATE RECURSIVE VIEW _name_ (_columns_) AS SELECT _..._; ``` 等同于 ``` CREATE VIEW _name_ AS WITH RECURSIVE _name_ (_columns_) AS (SELECT _..._) SELECT _columns_ FROM _name_; ``` 必須為一個遞歸的視圖指定一個視圖字段列表。 `_name_` 所要創建的視圖名稱(可以有模式修飾)。 `_column_name_` 一個可選的名字列表,用作視圖的字段名。如果沒有給出,字段名取自查詢。 `WITH (` `_view_option_name_` [= `_view_option_value_`] [, ... ] ) 該子句為視圖指定選項參數;目前,唯一支持的參數名是`security_barrier`, 當視圖打算提供行級安全時,應該啟用該參數。參閱[Section 38.5](#calibre_link-480) 獲取全部細節。 `_query_` 一個將為視圖提供行和列的[SELECT](#calibre_link-104) 或[VALUES](#calibre_link-106)語句。 ## 注意 使用[DROP VIEW](#calibre_link-481)語句刪除視圖。 請注意視圖字段的名字和類型不一定是你們期望的那樣。比如, ``` CREATE VIEW vista AS SELECT 'Hello World'; ``` 在兩個方面很糟糕:字段名缺省是`?column?` 并且字段的數據類型缺省是`unknown`。 如果你想視圖的結果是一個字符串文本,那么請像下面這樣使用: ``` CREATE VIEW vista AS SELECT text 'Hello World' AS hello; ``` 對視圖引用的表的訪問的權限由視圖的所有者決定。在一些情況下, 這可用于提供安全但是限制訪問底層表。不過,不是所有視圖對于篡改都是安全的; 參閱[Section 38.5](#calibre_link-480)獲取細節。 在視圖里調用的函數當作他們直接從使用視圖的查詢里調用看待。因此, 視圖的用戶必須有調用視圖使用的所有函數的權限。 當`CREATE OR REPLACE VIEW`用在一個現有的視圖上時, 只改變了視圖定義的SELECT規則。其他視圖屬性,包括所有權、權限和非SELECT規則, 保持不變。要替換視圖,你必須擁有該視圖(包括成為擁有者角色的一員)。 ### 可更新的視圖 簡單的視圖是自動可更新的:系統允許`INSERT`、`UPDATE` 和`DELETE`語句和在規則表上一樣的方式在視圖上使用。 如果視圖滿足所有下列的條件,那么就是自動可更新的: * 視圖在它的`FROM`列表中必須只有一個條目, 該條目必須是一個表或其他可更新視圖。 * 視圖定義必須沒有在頂級包含`WITH`、`DISTINCT`、`GROUP BY`、 `HAVING`、`LIMIT`或`OFFSET`子句。 * 視圖定義必須沒有在頂級包含集合運算(`UNION`、`INTERSECT` 或`EXCEPT`)。 * 視圖的選擇列表中的所有字段必須簡單的引用底層關系的字段。 它們不能是表達式、字面值或函數。也不能引用系統字段。 * 在視圖的選擇列表中,底層關系的字段出現不能超過一次。 * 視圖必須沒有`security_barrier`屬性。 如果視圖是自動可更新的,那么系統將轉換視圖上的任意`INSERT`、 `UPDATE`或`DELETE`語句為相應的底層基本關系上的語句。 如果一個自動可更新的視圖包含一個`WHERE`條件, 那么該條件約束基本關系的哪些行可以被視圖上的`UPDATE` 和`DELETE`語句修改。不過,允許`UPDATE` 更改一個行,所以它不再滿足`WHERE`條件,并且因此不再通過視圖可見。 相似的,`INSERT`命令可以潛在的插入不滿足`WHERE` 條件的基本關系行,并且因此不能通過視圖可見。 不滿足所有這些條件的更復雜的視圖缺省是只讀的:系統將不允許在該視圖上插入、 更新或刪除。可以通過在該視圖上創建`INSTEAD OF`觸發器獲得可更新視圖的效果, 該觸發器必須轉換在該視圖上的嘗試插入等為其他表上的適當動作。更多信息請參見 [CREATE TRIGGER](#calibre_link-459)。還有一種可能性是創建規則 (參閱[CREATE RULE](#calibre_link-12)),但是實際上觸發器更容易理解和正確使用。 請注意,用戶在視圖上執行插入、更新或刪除必須在該視圖上有相應的插入、 更新或刪除的權限。此外,視圖的所有者必須在底層基礎關系上有相關的權限, 但是執行更新的用戶不需要在底層基礎關系上的任何權限 (參閱[Section 38.5](#calibre_link-480))。 ## 例子 創建一個由所有喜劇電影組成的視圖: ``` CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy'; ``` 這將創建一個視圖,在視圖創建的時候包含`film`表中字段。 盡管用`*`創建了該視圖,但是后來添加到表中的字段將不會是視圖的一部分。 創建一個由數字1到100組成的遞歸的視圖: ``` CREATE RECURSIVE VIEW nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100; ``` ## 兼容性 SQL 標準為`CREATE VIEW`聲明了一些附加的功能: ``` CREATE VIEW _name_ [ ( _column_name_ [, ...] ) ] AS _query_ [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] ``` 完整的 SQL 命令可選的子句是: `CHECK OPTION` 這個選項控制自動可更新視圖的行為。給出時,對視圖的`INSERT` 和`UPDATE`都要檢查以確保新行滿足視圖定義的條件(也就是說, 新行應該可以通過視圖看到)。如果沒有通過檢查,更新將被拒絕。 沒有`CHECK OPTION`,允許對視圖的`INSERT` 和`UPDATE`命令創建通過該視圖不可見的行。 (后者的行為當前只有PostgreSQL提供。) `LOCAL` 對這個視圖進行完整性檢查。 `CASCADED` 對此視圖和任何相關視圖進行完整性檢查。在既沒有聲明`CASCADED` 也沒有聲明`LOCAL`時,假設為`CASCADED`。 `CREATE OR REPLACE VIEW`是PostgreSQL 的擴展。臨時視圖的概念也是擴展。`WITH`子句也是一個擴展。 ## 又見 [ALTER VIEW](#calibre_link-482), [DROP VIEW](#calibre_link-481), [CREATE MATERIALIZED VIEW](#calibre_link-109)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看