内容来自实验楼:MySQL 基础课程
- 创建视图
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
视图。
在视图定义中命名的表必须已存在。
不能将触发程序与视图关联在一起。 -
修改视图
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
-
删除视图
DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]
-
可更新视图
对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。
如果视图包含下述结构中的任何一种,那么它就是不可更新的:
聚合函数(SUM()
,MIN()
,MAX()
,OUNT()
等)。
DISTINCT
GROUP BY
HAVING
UNION
或UNION ALL
位于选择列表中的子查询
Join
FROM
子句中引用不可更新视图
WHERE
子句中的子查询引用的是FROM
子句中的表。
仅引用文字值(在该情况下,没有要更新的基表)。
ALGORITHM = TEMPTABLE
(使用临时表总会使视图成为不可更新的)。