让我们来了解视图吧!
1、视图是从一个或者几个基本表/视图导出的虚表
2、数据库中只存放视图的定义,不存放视图对应的数据,那么这些数据在哪里呢?还在原来的表里
3、从2我们可以发现,视图像一个窗口,当基本表中的数据发生变化时,我们可以透过视图观察到数据的变化
一起来搞事情呀! 视图可以被查询、再定义。
但是!!被更新(增、删、改)有限制哦!!!
定义视图
以下图示是定义视图时命令的框架:
create view info_student1
as
select sno,sname,sbirthday,sclass,sex
from student
where sclass='信管系0101'
create view info_student2
as
select sno,sname,sbirthday,sclass,sex
from student
where sclass='信管系0101'
with check option
总结 (1)WITH CHECK OPTION是表示对视图进行更新、插入、删除操作时要保证UPDATE,INSERT,DELETE的行满足视图定义里的子查询的条件表达式。(下:视图更新的例子解释更清晰)
(2)视图中的属性列名只能–全部选择或全部省略,除此之外,没有其他选择。
(3)上述例子中都省略了视图的列名,隐含了它是由子查询SELECT子句中的三个列名组成的。
(4)DBMS执行语句时只是把视图的定义存在数据字典里,不执行SELECT语句。
查询视图
select *
from info_student1
where 2020-year(sbirthday)>27
总结 视图查询时,DBMS先进行有效性检查,也就是看查询中涉及的表、视图是否存在。若存在,则从数据字典找到视图定义,将查询结合,再执行。所以,DBMS其实帮我们做了大部分的工作,只了解原理就好。
更新视图
insert into info_student1(sno,sname,sbirthday,sclass,sex)
values ('011111136','某某某','1987.11.9','信管系0101','男')
delete from info_student1
where sname='某某某' and sno='01111135'
update info_student2
set sname='某某某'
where sno='01111103'
总结 (1)为防止用户在通过视图对数据进行增删改时,不注意把不属于视图范围内的基本表的数据进行了操作,所以在定义的时候就加了WITH CHECK OPTION。背后的意义就是,DBMS在执行时会检查操作,满足条件则执行,否则拒绝。
(2)在关系数据库中,并不是所有视图都可以更新
看了这么多,视图到底有什么作用呢? (1)简化操作,数据清晰。用户通过视图只需要把注意力放在自己关心是数据上,相对于对基本表操作而言,简化了操作,且结构简单清晰。
(2) 灵活,便于不同用户以多种角度看待同一数据。
(3) 对重构数据库提供了一定程度上的逻辑独立性。重构数据库时,修改相关操作,用户的应用程序不会受影响,也就是新的视图定义仍然是原来的用户关系。
(4) 对机密数据提供安全保护。保护数据的安全性,应该是我们最关心最重视的事了吧。有了视图机制,应用系统会为不同的用户提供不同的用户视图,就可以保证部分机密数据不出现在不必看到的用户视图上。
(5) 适当的利用视图使查询更加清晰