CREATE VIEW

Synopsis

  1. CREATE [ OR REPLACE ] VIEW view_name
  2. [ SECURITY { DEFINER | INVOKER } ]
  3. AS query

Description

Create a new view of a SELECT 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 everytime 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 query user may not be allowed to access directly. Note that the current_user function will return the query user, not the view owner, and thus may be used to filter out rows or otherwise restrict access based on the user currently accessing the view.

In the INVOKER security mode, tables referenced in the view are accessed using the permissions of the query user (the invoker of the view). A view created in this mode is simply a stored query.

Examples

Create a simple view test over the orders table:

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

Create a view orders_by_date that summarizes orders:

  1. CREATE VIEW orders_by_date AS
  2. SELECT orderdate, sum(totalprice) AS price
  3. FROM orders
  4. GROUP BY orderdate

Create a view that replaces an existing view:

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

See Also

DROP VIEW, SHOW CREATE VIEW