问题陈列
1、视图的定义是什么?
2、创建视图的语法是什么?能否根据现有视图生成新的视图?
3、修改视图的语法
4、删除视图的语法
5、怎样为视图设置检查选项?视图检查选项有哪几种?默认是哪一种?这几种有什么区别?
6、基于单表生成的视图中,能否进行insert、update、delete操作?哪些可以?哪些不可以?
7、基于多表生成的视图中,能否进行insert、update、delete操作?
8、视图的作用是什么?
9、其它问题:
(1)视图可以加索引吗?
(2)如果生成视图的基表发生了结构变化,例如字段改变,视图会随之改变吗?
问题1 视图的定义
视图的定义是什么?
简单来讲,视图就是一个虚表,它里面行和列存储的数据都对应数据库中的一个表或多个表。
问题2 创建视图
创建视图的语法是什么?能否根据现有视图生成新的视图?
创建视图的语法:
create view [视图名称] as [select查询语句] ;
举例:
create view v1 as select id,name from user;
可以根据现有视图生成新的视图。
create view v1 as select id,name from user;
create view v2 as select name from v1;
问题3 修改视图
修改视图的语法
alter view [视图名称] as [select查询语句] ;
问题4 删除视图
drop view if exists [视图名称] ;
注:if exists 可以省略
问题5 视图与检查选项
怎样为视图设置检查选项?视图检查选项有哪几种?默认是哪一种?这几种有什么区别?
(1)创建视图时在后面添加with cascaded check option或者with local check option;
(2)两种。
(3)默认是with cascaded check option。
(4)区别:
想创建两个视图,一个是v1,一个是v2,v2基于v1生成。
create view v1 as select id,name from student where id<=10;
create view v2 as select id,name from v1 where id>=5 ;
当检查选项为cascaded时,
create view v1 as select id,name from student where id<=10;
create view v2 as select id,name from v1 where id>=5 with cascaded check option;
当在v2插入数据时,插入的数据id必须在5-10之间。
当检查选项为local时,
create view v1 as select id,name from student where id<=10;
create view v2 as select id,name from v1 where id>=5 with local check option;
当在v2插入数据时,插入的数据id>=5即可。
说明
cascaded级别,在v2进行数据操作,必须要满足v1的条件,无论v1有没有设置检查选项;
local级别,在v2进行数据操作,如果v1设置了检查选项,则满足v1的条件,如果v1设置没有,则忽略v1的条件。
问题6 单表视图与增删改操作
基于单表生成的视图中,能否进行insert、update、delete操作?哪些可以?哪些不可以?
可以进行insert、update、delete操作。
当生成视图的SQL语句中存在以下任意一个条件时,都不可以:
(1)聚合函数
(2)distinct
(3)group by
(4)having
(5)union 和 union all
问题7 多表视图与增删改操作
基于多表生成的视图中,能否进行insert、update、delete操作?
可以进行update操作,不可以进行insert和delete操作。
当生成视图的SQL语句中存在以下任意一个条件时,都不可以:
(1)聚合函数
(2)distinct
(3)group by
(4)having
(5)union 和 union all
问题8 视图的作用
(1)简单
看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
(2)安全
过视图用户只能查询和修改他们所能见到的数据。但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:
使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
(3)数据独立
视图可帮助用户屏蔽真实表结构变化带来的影响。
其它问题
(1)视图可以加索引吗?
不可以。因为视图是一张虚表。
(2)如果生成视图的基表发生了结构变化,例如字段改变,视图会随之改变吗?
视图会随之改变。因为视图中的数据是基表中的映射。