
什么是视图?视图的作用是什么?哪一类是可更新视图?
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,它不同于基本表,它是一个虚拟表,其内容由查询定义。在数据库中,存放的只是视图的定义而已,而不存放数据,这些数据仍然存放在原来的基本表结构中。只有在使用视图的时候,才会执行视图的定义,从基本表中查询数据。
同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表而言,视图的作用类似于筛选。定义视图可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储不同地区的数据,那么当需要将这些服务器上相似结构的数据组合起来的时候,这种方式就非常有用。
通过视图进行查询没有任何限制,用户可以将注意力集中在其关心的数据上,而非全部数据,这样就大大提高了运行效率与用户满意度。如果数据来源于多个基本表结构,或者数据不仅来自于基本表结构,还有一部分数据来源于其它视图,并且搜索条件又比较复杂,需要编写的查询语句就会比较繁琐,此时定义视图就可以使数据的查询语句变得简单可行。定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,所以,视图虽然增加了数据的安全性,但是不能提高查询的效率。
视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表(即视图定义中涉及到的表)中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。
数据库视图的作用有以下几点:
(1)隐藏了数据的复杂性,可以作为外模式,提供了一定程度的逻辑独立性。
(2)有利于控制用户对表中某些列或某些机密数据的访问,提高了数据的安全性。
(3)能够简化结构,执行复杂查询操作。
(4)使用户能以多种角度、更灵活地观察和共享同一数据。
视图对于DML操作应遵循的原则如下所示:
(1)简单视图可以执行DML操作。
(2)当视图包含GROUP BY子句、DISTINCT关键字时,不能执行DELETE操作。
(3)当视图出现下列情况时,不能通过视图修改基表或插入数据到基表:
(a)视图中包含GROUP BY子句、DISTINCT关键字。
(b)视图中包含了由表达式定义的列。
(c)视图中包含了ROWNUM伪列(针对Oracle数据库)。
(d)基表中未在视图中选择的其它列定义为非空且无默认值。
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。




