MySQL视图
1、定义
从一个或多个表中导出指定的属性,组成一张虚拟的新表。视图可以在已有视图的基础上定义,也可以在已有表的基础上定义。
2、优点
a) 增加数据安全性(视图只能进行查询、修改操作)。
b) 提高逻辑独立性(如原表中,增加一列,不会影响对视图的操作)。
c) 简化查询、修改条件。
3、创建视图
CREATE [ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE }]
VIEW 视图名 [(属性别名清单)]
AS SELECT [ * | 属性清单 ] FROM 表名
[WITH [CASCADED|LOCAL] CHECK OPTION];
[ALGORITHM = { UNDEFINED | MERGE | TEMPABLE }]:选择视图的算法
UNDEFINED:未定义算法,由MySQL自动选择
MERGE:合并视图的语句和定义
TEMPTABLE:把视图的结果存入一个临时的表中
[(属性清单)]:视图中各个属性的名称(默认与原表(或视图)相同)
SELECT语句:从表中筛选出合适的记录导入视图中
[WITH [CASCADED|LOCAL] CHECK OPTION]:更新视图时的约束条件
CASCADED:同时满足视图和表的约束条件
LOCAL:只满足表的约束条件
注:创建视图时,需要有CREATE VIEW权限 和 SELECT 权限
SELECT Select_priv, Create_view_priv mysql.user WHERE user=’root’;
例1:创建默认属性别名视图
CREATE ALGORITHM=UNDEFINED
VIEW view1
AS SELECT * FROM table1
WITH CASCADED CHECK OPTION;
例2:创建自定义属性别名的视图
CREATE ALGORITHM=UNDEFINED
VIEW view1(alias1, alias2)
AS SELECT stat1 stat2 FROM table1
WITH CASCADED CHECK OPTION;
4、查看视图
DESCRIBE 视图名称;
DESC 视图名称;
5、查看视图(表)的属性(基本信息)
SHOW TABLE STATUS LIKE ‘<表|视图>名’;
6、查看创建视图的语句
SHOW CREATE VIEW 视图名 \G;
7、查看数据库中所有视图(视图列表)
SELECT * FROM information_schema.views \G;
注:所有视图定义都位于 information_schema.views表中。
8、修改视图1
CREATE OR REPLACE [ALGORITHM={UNDEFINE | MERGE | TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
9、修改视图2
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
注:因视图本身特性,只能在表或已有视图的基础上创建视图,所以修改视图就是对已存在的视图进行二次创建,覆盖掉原视图。
10、更新视图
注:因视图是一个虚拟的表,所以更新视图是更新视图所对应的基本表。(通过INSTER、UPDATE、DELETE)语句来对视图进行操作。
UPDATE 视图名 SET 属性名1=‘VALUE’, 属性名2=’VALUE’,
... ... 属性名n=’VALUE’;
更新视图限制条件:
包含SUM()、MAX()、MIN()、COUNT() 函数的视图不能更新。
包含UNION、UNION ALL、DESTINCT、GROUP BY、HAVIG关键字的视图不能更新。
包含常量的视图不能更新。
包含SELECT语句的视图不能更新。
由视图导出的视图不能更新。
总结:视图只适合查询,别用视图更新。
11、删除视图
DROP VIEW [IF EXISTS] 视图名列表 [RESTRICT | CASCADE]
[IF EXISTS]:判断视图是否存在,如果视图存在则删除。
视图名列表:视图名1,视图名2,视图名3 ... ... 视图名n