一、视图的概述
视图(view)是一种虚拟存在的表,视图在数据库中实际并不存在,视图可以理解为一条select语句执行后返回的结果集,因此在创建视图时,实际主要是在创建这条select查询语句上
二、视图存在的意义
1)简单:使用视图的用户不需要关心后面对应的表结构、关联条件和筛选条件,对用户来就是已经过滤好的复合条件的结果集
2)安全:使用视图,用户只能查看到他们被允许看到的结果集,当不允许用户看到所有的表的信息时,可以通过视图为用户展示他能所能看到的信息
3)数据独立:一旦视图结构确定以后,可以屏蔽表结构变化对用户的影响,源表的增加列对视图没有影响;源表修改表明,只需要修改对应的视图来解决对用户的影响
三、视图的创建或修改
1)创建视图语法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
2)修改视图的语法为
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
3)WITH选项说明
选项 :
WITH [CASCADED | LOCAL] CHECK OPTION 决定了是否允许更新数据使记录不再满足视图的条件。
LOCAL : 只要满足本视图的条件就可以更新。
CASCADED : 必须满足所有针对该视图的所有视图的条件才可以更新。
示列:创建视图
CREATE OR REPLACE VIEW city_country_view as select t.*,c.country_name from country c, city t where c.country_id = t.country_id;
4)查询视图
select * from city_country_view;
视图结果集
5)查看数据库中存在视图
#5.1之前:
SHOW VIEWS
#5.1之后不仅可以查看视图同时也可以看到所有的表:
SHOW TABLES
6)查看视图信息
SHOW TABLE STATUS like 'city_country_view';
7)查询某个视图的定义
SHOW CREATE VIEW city_country_view;
8)删除视图
语法:
DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]
示例 , 删除视图city_country_view :
DROP VIEW city_country_view;