创建视图

概述

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