日期:2014-05-16  浏览次数:20733 次

摘录:mysql视图

第22章:视图

目录

22.1. ALTER VIEW语法
22.2. CREATE VIEW语法
22.3. DROP VIEW语法
22.4. SHOW CREATE VIEW语法

5.1MySQL服务器中提供了视图功能(包括可更新视图)。

本章讨论了下述主题:

·???????? 使用CREATE VIEWALTER VIEW创建或更改视图。

·???????? 使用DROP VIEW销毁视图。

·???????? 使用SHOW CREATE VIEW显示视图元数据。

关于使用视图方面的限制,请参见附录I:特性限制。

如果你已从不支持视图的较旧版本升级到MySQL 5.1,要想使用视图,应升级授权表,使之包含与视图有关的权限。请参见2.10.2节,“升级授权表”。

22.1.?ALTER VIEW语法

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

该语句用于更改已有视图的定义。其语法与CREATE VIEW类似。请参见22.2节,“CREATE VIEW语法”。该语句需要具有针对视图的CREATE VIEWDROP权限,也需要针对SELECT语句中引用的每一列的某些权限。

22.2.?CREATE VIEW语法

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

该语句能创建新的视图,如果给定了OR REPLACE子句,该语句还能替换已有的视图。select_statement是一种SELECT语句,它给出了视图的定义。该语句可从基表或其他视图进行选择。

该语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR REPLACE子句,必须在视图上具有DROP权限。

视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_name.view_name

mysql> CREATE VIEW test.v AS SELECT * FROM t;

表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。

视图必须具有唯一的列名,不得有重复,就像基表那样。默认情况下,由SELECT语句检索的列名将用作视图列名。要想为视图列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的IDcolumn_list中的名称数目必须等于SELECT语句检索的列数。

SELECT语句检索的列可以是对表列的简单引用。也可以是使用函数、常量值、操作符等的表达式。

对于SELECT语句中不合格的表或视图,将根据默认的数据库进行解释。通过用恰当的数据库名称限定表或视图名,视图能够引用表或其他数据库中的视图。

能够使用多种SELECT语句创建视图。视图能够引用基表或其他视图。它能使用联合、UNION和子查询。SELECT甚至不需引用任何表。在下面的示例中,定义了从另一表选择两列的视图,并给出了根据这些列计算的表达式:

mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty? | price | value |
+------+-------+-------+
|??? 3 |??? 50 |?? 150 |
+------+-------+-------+

视图定义服从下述限制: