57 lines
1.8 KiB
Markdown
57 lines
1.8 KiB
Markdown
|
|
CREATE VIEW
|
|
===========
|
|
|
|
Synopsis
|
|
--------
|
|
|
|
``` sql
|
|
CREATE [ OR REPLACE ] VIEW view_name
|
|
[ SECURITY { DEFINER | INVOKER } ]
|
|
AS query
|
|
```
|
|
|
|
Description
|
|
-----------
|
|
|
|
Create a new view of a [SELECT](./select.md) query. The view is a logical table that can be referenced by future queries. Views do not contain any data. Instead, the query stored by the view is executed every time the view is referenced by another query.
|
|
|
|
The optional `OR REPLACE` clause causes the view to be replaced if it already exists rather than raising an error.
|
|
|
|
Security
|
|
--------
|
|
|
|
In the default `DEFINER` security mode, tables referenced in the view are accessed using the permissions of the view owner (the *creator* or *definer* of the view) rather than the user executing the query. This allows providing restricted access to the underlying tables, for which the user may not be allowed to access directly.
|
|
|
|
In the `INVOKER` security mode, tables referenced in the view are accessed using the permissions of the user executing the query (the *invoker* of the view). A view created in this mode is simply a stored
|
|
query.
|
|
|
|
Regardless of the security mode, the `current_user` function will always return the user executing the query and thus may be used within views to filter out rows or otherwise restrict access.
|
|
|
|
Examples
|
|
--------
|
|
|
|
Create a simple view `test` over the `orders` table:
|
|
|
|
CREATE VIEW test AS
|
|
SELECT orderkey, orderstatus, totalprice / 2 AS half
|
|
FROM orders
|
|
|
|
Create a view `orders_by_date` that summarizes `orders`:
|
|
|
|
CREATE VIEW orders_by_date AS
|
|
SELECT orderdate, sum(totalprice) AS price
|
|
FROM orders
|
|
GROUP BY orderdate
|
|
|
|
Create a view that replaces an existing view:
|
|
|
|
CREATE OR REPLACE VIEW test AS
|
|
SELECT orderkey, orderstatus, totalprice / 4 AS quarter
|
|
FROM orders
|
|
|
|
See Also
|
|
--------
|
|
|
|
[DROP VIEW](./drop-view.md), [SHOW CREATE VIEW](./show-create-view.md)
|