SQL视图

内容来自实验楼:MySQL 基础课程 

  1. 创建视图
    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        VIEW view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]

    select_statement是一种SELECT语句,它给出了视图的定义。该语句可从基表或其他视图进行选择。
    例子:

    mysql> CREATE DATABASE test;
    mysql> USE test;
    mysql> CREATE TABLE t (qty INT, price INT);
    mysql> INSERT INTO t VALUES(3, 50), (5, 60);
    mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
    mysql> SELECT * FROM v;

    视图定义服从下述限制:
      SELECT语句不能包含FROM子句中的子查询。
      SELECT语句不能引用系统或用户变量。
      SELECT语句不能引用预处理语句参数。
         在存储子程序内,定义不能引用子程序参数或局部变量。
         在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。
         在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。
         在视图定义中命名的表必须已存在。
         不能将触发程序与视图关联在一起。

  2. 修改视图

    ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        VIEW view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]

     

  3. 删除视图

    DROP VIEW [IF EXISTS]
        view_name [, view_name] ...
        [RESTRICT | CASCADE]

     

  4. 可更新视图
    对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。
    如果视图包含下述结构中的任何一种,那么它就是不可更新的:
          聚合函数(SUM(), MIN(), MAX(), OUNT()等)。
          DISTINCT
          GROUP BY
          HAVING
          UNIONUNION ALL
      
    位于选择列表中的子查询
          Join
          FROM子句中引用不可更新视图
          WHERE子句中的子查询引用的是FROM子句中的表。
          仅引用文字值(在该情况下,没有要更新的基表)。
          ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。

你可能感兴趣的:(数据库)