189 8069 5689

如何理解oracle视图,oracle视图使用

什么是视图视图的作用

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。以下是由我整理关于什么是视图的内容,希望大家喜欢!

创新互联专业做网站、网站制作,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文平台等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。

视图的含义

从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图的作用类似于筛选。定义视图的筛选可以来自当前或 其它 数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。

视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会 保险 基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

视图:查看图形或文档的方式。

视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。

当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。

视图的种类区别

Oracle数据库视图的种类和区别

关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息。这是大家常用的视图,如:create view 视图。

内嵌视图:在from语句中的可以把表改成一个子查询,如:select a、id ,b、id from emp a,(select id from dept) b where a、id=b、id内嵌视图不属于任何用户,也不是对象,内嵌视图是子查询的一种,可以与数据表、视图一样作为查询语句的数据源存在,但在形式上有较大的区别,内嵌视图不必使用create view命令进行创建,因此,在数据字典中也无法获得相应信息。内嵌视图的特点在于无须创建真正的数据库对象,而只是封装查询,因此会节约数据库资源,同时不会增加维护成本。但是内嵌视图不具有可复用性,因此当预期将在多处调用到同一查询定义时,还是应该使用关系视图。

对象视图:对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。

对象视图创建之后,同样可以在数据字典中获得其相应信息。利用Oracle内置视图user_views可以获得对象视图相关信息。Oracle中的对象数据实际仍然以关系数据的形式存储。但是,对象的特性,例如继承、封装等,都为开发人员提供了更加灵活的处理形式。同样,可以构造复杂的对象类型来封装复杂的多表查询。

物化视图:常用于数据库的容灾,不是传统意义上虚拟视图,是实体化视图,和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现,主备数据库通过data link连接,在主备数据库物化视图进行数据复制。当主数据库垮掉时,备数据库接管,实现容灾。

视图的作用

简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

安全性。通过视图用户只能查询和修改他们所能见到的数据。但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。

视图的优点

1、 视点集中

视图集中即是使用户只关心它感兴趣的某些特定数据和他们所负责的特定任务。这样通过只允许用户看到视图中所定义的数据而不是视图引用表中的数据而提高了数据的安全性。

2、 简化操作

视图大大简化了用户对数据的操作。因为在定义视图时,若视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。可见视图向用户隐藏了表与表之间的复杂的连接操作。

3、 定制数据

视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。因此,当有许多不同水平的用户共用同一数据库时,这显得极为重要。

4、 合并分割数据

在有些情况下,由于表中数据量太大,故在表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。如果使用视图就可以重新保持原有的结构关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。

5、 安全性

视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据。其它数据库或表既不可见也不可以访问。如果某一用户想要访问视图的结果集,必须授予其访问权限。视图所引用表的访问权限与视图权限的设置互不影响。

在Oracle 中视图和实例化视图的区别是什么

视图是本质上是一张虚拟表,不包含任何数据。查看查询的结果不任何地方都存储在磁盘上,每次执行查询时,将重新创建该视图。

实例化的视图是实际结构存储在数据库中,并写入到磁盘。他们将基于参数定义它们在创建时进行更新。

oracledba_viewstext怎么看

视图的定义

视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候, 只是重新执行SQL.

视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。

视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。

视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

还有一种视图:物化视图(MATERIALIZED VIEW ),也称实体化视图,快照 (8i 以前的说法) ,它是含有数据的,占用存储空间。 关于物化视图,具体参考我的blog:

Oracle 物化视图

javascript:void(0)

二. 视图的作用

2.1 简单性。

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2.2 安全性。

通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过Oracle视图,用户可以被限制在数据的不同子集上:

使用权限可被限制在基表的行的子集上。

使用权限可被限制在基表的列的子集上。

使用权限可被限制在基表的行和列的子集上。

使用权限可被限制在多个基表的连接所限定的行上。

使用权限可被限制在基表中的数据的统计汇总上。

使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

视图的安全性可以防止未授权用户查看特定的行或列,是用户只能看到表中特定行的方法如下:

1 在表中增加一个标志用户名的列;

2 建立Oracle视图,是用户只能看到标有自己用户名的行;

3 把视图授权给其他用户。

2.3 逻辑数据独立性。

视图可帮助用户屏蔽真实表结构变化带来的影响。

视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

1 如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

2 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

3 如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

4 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。

三. 视图的基本语法:

CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name

[(column_name)[,….n]]

AS

Select_statement

[WITH CHECK OPTION[CONSTRAINT constraint_name]]

[WITH READ ONLY]

说明:

view_name :  视图的名字

column_name: 视图中的列名

在下列情况下 , 必须指定视图列的名称

* 由算术表达式 , 系统内置函数或者常量得到的列

* 共享同一个表名连接得到的列

* 希望视图中的列名与表中的列名不同的时候

REPLACE:  如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖

FORCE:  强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建

NOFORCE:  只有基表存在且具有创建视图权限时, 才可以创建视图

WITH CHECK OPTION  指出在视图上所进行的修改都要符合select_statement 所指定的限制条件

WITH READ ONLY  只允许查看视图

视图的定义原则:

1. 视图的查询可以使用复杂的 SELECT 语法,包括连接 / 分组查询和子查询;

2. 在没有 WITH CHECK OPTION 和 READ ONLY的情况下,查询中不能使用

ORDER BY子句;

3. 如果没有为 CHECK OPTION 约束命名,系统会自动为之命名,形式为 SYS_Cn;

4. OR REPLACE 选项可以不删除原视图便可更改其定义并重建,或重新授予对象

权限。

四. 视图操作

视图分为简单视图( 基于单个基表,且不包含函数和数据分组操作 ) 和复杂视图( 基于多个基表或视图).

简单视图可以通过视图修改数据. 这些修改包括插入数据. 更新数据和删除数据. 但是对于复杂视图来说, 通过视图修改数据必须满足一定的规则.

在视图定义中没有设定READ ONLY 的前提下, 如果视图包含了下面的内容, 那么不能通过视图删除表中的数据:

* 分组函数, 如SUM,AVG,MIN,MAX 等

*  GROUP BY 子句

* 包含了表达式

* ROWNUM 伪列

插入数据时, 除了满足上面的条件外, 还需要保证那些没有包含在视图定义中的基表的列必须允许空值. 如果在视图定义中还包含了WITH CHECK OPTION 子句, 那么对视图的修改除了前面的那些原则外, 还必须满足指定的约束条件. 个人认为,视图利于查询,不利于修改.

1. 查询视图: 可依赖于多个基表.

SELECT  * FROM view_name; /* 类似于查询表数据*/

2. 更新视图的前提:

没有使用连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有GROUP BY,ONNECT BY ,START WITH 子句及DISTINCT 关键字. 创建视图的SELECT 语句中不包含从基表列通过计算所得的列. 创建视图没有包含只读属性.

3. 插入数据

INSERT  INTO  view_name VALUES();

4. 修改数据:

UPDATE  view_name SET …

若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据.

5. 删除数据:

Delete from view_name where …

同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据.

6. 修改视图定义:

修改视图的好处在于, 所有相关的权限都依然存在. 语法同创建视图相同.

7. 删除视图:

DROP VIEW view_name;

只有视图所有者和具备DROP VIEW 权限的用户可以删除视图。删除视图的定义不影响基表中的数据。视图被删除后,基于被删除视图的其他视图或应用将无效

Oracle中视图和同义词的区别

Oracle中视图和同义词的区别如下:

视图和同义词分别都是数据库中的对象名称,它们都不对应实际的数据存储,都依赖其他对象的存在而存在。

一、视图:视图可以被看成是虚拟表或存储查询。除非是索引视图,否则视图的数据不会作为非重复对象存储在数据库中。一般是基于一个或多个数据表经数据查询语句构建而成;视图可以再被用于数据查询语句中。

二、同义词:是架构范围内的对象的另一名称。通过使用同义词,客户端应用程序可以使用由一部分组成的名称来引用基对象,而不必使用由两部分、三部分或四部分组成的名称。可以理解为是对数据库中一个对象的快捷方式或者在特定范围内的别名;不限于数据表,几乎所有的数据库对象都可以建立同义词。

1.视图可以对应一张或多张表,同义词只能对应一张表名称

2.视图可以设置其他约束条件

3.可以在同义词上建立视图:

例如,已经存在一个名为synonym_city的同义词和一个名为table_citys的表,可以创建视图:CREATE OR REPLACE NOFORCE VIEW view_city AS SELECT * FROM synonym_city,table_citys;

4.可以通过对同义词进行任何DML操作,对表数据进行插入、更新、删除,通过对视图只能进行更新和删除操作。

值得注意的是:视图和同义词都可以屏蔽用户访问其他用户拥有的表。

例如:现在存在两个用户:scott、sys,以sys用户登录

创建跨用户表的同义词:

CREATE OR REPLACE PUBLIC SYNONYM SYN_EMP for scott.emp;

创建跨用户的表的视图:

CREATE OR REPLACE VIEW view_EMP AS SELECT * FROM scott.emp

然后进行查询操作:

SELECT * FROM SYN_EMP ;

SELECT * FROM view_EMP ;

查询结果是一样的。

oracle 视图有什么用呢?

可以作为一个特定查询,使用户可以重复使用,比如,建立一个查询工资大于某个值的员工名单的视图,这样每个操作员就可以直接使用这个视图来查询,而不是每个人都要输入复杂的select语句;

另外,基于安全考虑,可以针对特定的视图赋给用户权限,而不是给用户赋给一个或几个表的权限,这样可以避免误操作更新数据的不安全因素。


当前题目:如何理解oracle视图,oracle视图使用
文章出自:http://cdxtjz.cn/article/hcdped.html

其他资讯