视图
视图概述
视图是指从一个或几个基本表中导出的表,可以像操作基本表一样操作视图。视图中只存放视图定义而不存放视图对应的数据。
如果基本表的数据发生变化,从视图中查询出的数据也会发生变化。因此可以把视图认为是一个虚拟表。
优点
简化查询语句
日常开发中我们可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作。
安全性
通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不到也取不到。
逻辑数据独立性
视图可以帮助用户屏蔽真实表结构变化带来的影响。
视图管理
创建视图的语法格式
create view<视图名>[(<列名>...)] as 子查询 [WITH CHECK OPTION]
子查询可以出现任意select语句,但通常在查询语句中不允许出现Order by和DISTINCT
在单表上创建视图
在多表上创建视图
查看视图
使用DESCRIBE语句可以查看视图的字段信息
DESCRIBE 视图名;
或DESC 视图名;
使用SHOW TABLE STATUS语句可以查看视图的基本信息
SHOW TABLE STATUS LIKE '视图名'
使用SHOW CREATE VIEW语句不仅可以查看创建视图时的定义语句,还可以查看视图的字符编码
SHOW CREATE VIEW 视图名;
修改视图
由于视图是不实际存储数据的虚拟表,因此更新视图的操作,最终要转化为对基本表的更新操作。为了防止对视图进行数据更新时,对不属于视图范围的基本表数据进行操作,可以在定义视图时加上WITH CHECK OPTION子句。
我们发现表中数据发生了改变。由于视图多是给用户进行浏览的,并不需要其进行修改,所以这样做很不安全。所以我们一般在SQL语句末尾加上WITH CHECK OPTION子句,这样用户就不能随意进行修改了。
1、使用CREATE OR REPLACE VIEW语句修改视图
CREATE [OR REPLACE ][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH[CASCADED | LOCAL] CHECK OPTION]
2、使用ALTER语句修改视图
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH[CASCADED | LOCAL] CHECK OPTION]
更新视图
当视图中包含有如下内容时,视图的更新操作将不能被执行:
视图中不包含基本表中被定义为非空的列。
在定义视图的SELECT语句后的字段列表中使用了数学表达式。
在定义视图的SELECT语句后的字段列表中使用聚合函数。
在定义视图的SELECT语句中使用了DISTINCT,UNION,TOP,GROUP BY或HAVING子句。
使用UPDATE语句更新视图
使用DELETE语句更新视图
使用INSERT语句更新视图
删除视图
只能删除视图的定义,不会删除数据。
drop view <视图名>
应用案例--视图的应用