创建视图¶
概述¶
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'