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'