CREATE VIEW

概要

CREATE [ OR REPLACE ] VIEW view_name
[ SECURITY { DEFINER | INVOKER } ]
AS query

描述

建立 SELECT 查詢的新視圖。視圖是一個邏輯表,可以被未來的查詢引用。視圖不包含任何資料。相反地,每次當其他查詢引用視圖時,就會執行視圖儲存的查詢。

選用的 OR REPLACE 子句會導致在視圖已存在的情況下取代視圖,而不是引發錯誤。

安全性

在預設的 DEFINER 安全性模式中,視圖中引用的表是使用視圖所有者(視圖的建立者定義者)的權限來存取,而不是執行查詢的使用者。這允許對基礎表提供受限的存取,查詢使用者可能不被允許直接存取這些表。請注意,current_user 函式將返回查詢使用者,而不是視圖所有者,因此可以用於篩選行或以其他方式根據目前存取視圖的使用者來限制存取。

INVOKER 安全性模式中,視圖中引用的表是使用查詢使用者(視圖的調用者)的權限來存取。在此模式下建立的視圖只是一個已儲存的查詢。

default-view-security-mode 可以用來設定視圖建立的預設安全性模式。

範例

orders 表格上建立一個簡單的視圖 test

CREATE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 2 AS half
FROM orders

建立一個 orders_by_date 視圖,總結 orders

CREATE VIEW orders_by_date AS
SELECT orderdate, sum(totalprice) AS price
FROM orders
GROUP BY orderdate

建立一個取代現有視圖的視圖

CREATE OR REPLACE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 4 AS quarter
FROM orders

將預設視圖安全性模式設定為 INVOKER

SET SESSION default_view_security_mode='INVOKER'

另請參閱

DROP VIEW, SHOW CREATE VIEW