视图是外模式再加上外模式到概念模式的映像 :
外模式是用户与数据库的系统接口,是用户用到的那部分数据的描述。视图对应着三级模式中的外模式,每个用户只能看见和访问所对应的外模式中的数据,简化了用户视图。CREATE VIEW就是实现外模式,AS子查询就完成了E-C映像。
视图的优点:
- 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集;
- 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行或列,但是通过视图就可以简单的实现;
- 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列队视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
- 总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率
使用视图,可以定制用户数据,简化数据操作:
当我们在庞大的数据库中搜索想要的关键信息时,聚焦特定的数据,简化搜索后得到数据的复杂性;在使用查询时,很多时候我们要使用聚合函数,同时还要显示其它信息,可能还会需要关联到其它表,这时写的语句会很长,使用视图就可避免这个问题。
使用视图,基表中的数据就有了一定的安全性:
因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要字段信息通过视图给用户。视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。
视图的基本操作:视图是逻辑表,也就是说视图不是真实的表,但操作视图和操作普通表的语法是一样的。
- 用户可以在视图中无条件地使用select语句查询数据。
- 但使用insert、update和delete操作需要在创建视图时满足以下条件(满足以下条件的视图称为可更新视图):
- from子句中只能引用有1个表(真实表或可更新视图);
- 不能包含 with、distinct、group by、having、limit等子句;
- 不能使用复合查询,即不能使用union、intersect、except等集合操作;
- select子句的字段列表不能包含聚合、窗口函数、集合返回函数。
创建视图语法格式:
create view 视图名
(视图显示字段1
,视图显示字段2
,视图显示字段3
…..)
as
(select 字段1
,字段2
,字段3
….. from 表名1
,表名2
……) ;
[with check option;] 加上了with check option;后,不能执行插入操作!!!
create view V2_NotReturnBooks
as (
select b.ISBN ISBN,l.bookNo 书号,b.bname 书名,u.lname 借阅人名称,u.unitName 单位,l.borrowDate 借阅时间
from BookInfo b,Users u,Loan l,Books
where u.loanNo=l.loanNo and b.ISBN = Books.ISBN and Books.bookNo=l.BookNo
order by b.ISBN,l.bookNo
);
删除视图语法格式:
DROP VIEW if exists `视图名`;