志在指尖
用双手敲打未来

oracle视图(oracle视图和表的区别)

oracle视图

一.视图的界说
视图(view),也称虚表,不占用物理空间,这个也是相对概念,因为视图自身的界说句子仍是要存储在数据字典里的。视图只有逻辑界说。每次运用的时分,只是从头履行SQL。
视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于发生视图的表叫做该视图的基表。一个视图也能够从另一个视图中发生。
视图的界说存在数据库中,与此界说相关的数据并没有再存一份于数据库中。经过视图看到的数据存放在基表中。
视图看上去非常象数据库的物理表,对它的操作同任何其它的表相同。当经过视图修正数据时,实际上是在改动基表中的数据;相反地,基表数据的改动也会自动反映在由基表发生的视图中。因为逻辑上的原因,有些Oracle视图能够修正对应的基表,有些则不能(仅仅能查询)。
还有一种视图:物化视图(MATERIALIZEDVIEW),也称实体化视图,快照(8i曾经的说法),它是含有数据的,占用存储空间。
tips:查询视图没有什么约束,刺进/更新/删除视图的操作会受到必定的约束;一切针对视图的操作都会影响到视图的基表;为了避免用户经过视图间接修正基表的数据,能够将视图创立为只读视图(带上withreadonly选项)oracle
二.视图的效果
1)供给各种数据表现形式,能够运用各种不同的方法将基表的数据展现在用户面前,以便符合用户的运用习惯(主要手法:运用别号);
2)躲藏数据的逻辑复杂性并简化查询句子,多表查询句子一般是比较复杂的,而且用户需求了解表之间的关系,不然容易写错;假如根据这样的查询句子创立一个视图,用户就能够直接对这个视图进行”简单查询”而获得成果.这样就躲藏了数据的复杂性并简化了查询句子.这也是oracle供给各种”数据字典视图”的原因之一,all_constraints就是一个含有2个子查询并衔接了9个表的视图(在catalog.sql中界说);
3)履行某些有必要运用视图的查询.某些查询有必要借助视图的帮助才能完结.比如,有些查询需求衔接一个分组计算后的表和另一表,这时就能够先根据分组计算的成果创立一个视图,然后在查询中衔接这个视图和另一个表就能够了;
4)供给某些安全性确保.视图供给了一种能够控制的方法,即能够让不同的用户看见不同的列,而不允许拜访那些敏感的列,这样就能够确保敏感数据不被用户看见;
5)简化用户权限的管理.能够将视图的权限授予用户,而不必将基表中某些列的权限授予用户,这样就简化了用户权限的界说。
三创立视图
1权限:要在当前方案中创立视图,用户有必要具有createview体系权限;要在其他方案中创立视图,用户有必要具有createanyview体系权限.视图的功用取决于视图具有者的权限.
2语法:create[orreplace][force]view[schema.]view_name
[(column1,column2,…)]
as
select…
[withcheckoption][constraintconstraint_name]
[withreadonly];
tips:
1orreplace:假如存在同名的视图,则运用新视图”替代”已有的视图
2force:”强制”创立视图,不考虑基表是否存在,也不考虑是否具有运用基表的权限
3column1,column2,…:视图的列名,列名的个数有必要与select查询中列的个数相同;假如select查询包含函数或表达式,则有必要为其界说列名.此时,既能够用column1,column2指定列名,也能够在select查询中指定列名.
4withcheckoption:指定对视图履行的dml操作有必要满意“视图子查询”的条件即,对经过视图进行的增修改操作进行”查看”,要求增修改操作的数据,有必要是select查询所能查询到的数据,不然不允许操作并回来过错提示.默认情况下,在增修改之前”并不会查看”这些行是否能被select查询检索到.
5withreadonly:创立的视图只能用于查询数据,而不能用于更改数据.

oracle视图和表的区别

在MySQL中,视图可能是咱们最常用的数据库对象之一了。那么你知道视图和表的差异吗?你知道创立及运用视图要注意哪些点吗?可能许多人对视图仅仅一知半解,想具体了解视图的同学看过来哟,本篇文章会具体介绍视图的概念、创立及运用方法。
1.视图界说及简略介绍
视图是基于SQL句子的成果集的可视化的表,即视图是一个虚拟存在的表,能够包括表的全部或许部分记录,也能够由一个表或许多个表来创立。运用视图就能够不必看到数据表中的一切数据,而是只想得到所需的数据。当咱们创立一个视图的时分,实际上是在数据库里执行了SELECT句子,SELECT句子包括了字段名称、函数、运算符,来给用户显现数据。
视图的数据是依靠本来表中的数据的,所以本来的表的数据发生了改动,那么显现的视图的数据也会跟着改动,例如向数据表中刺进数据,那么在检查视图的时分,会发现视图中也被刺进了同样的数据。视图实际上是由预界说的查询方式的表所组成的。
2.视图创立及运用方法
创立视图规范语法:
CREATE[ORREPLACE][ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}][DEFINER=user][SQLSECURITY{DEFINER|INVOKER}]VIEWview_name[(column_list)]ASselect_statement[WITH[CASCADED|LOCAL]CHECKOPTION]
语法解读:
1)ORREPLACE:表明替换已有视图,假如该视图不存在,则CREATEORREPLACEVIEW与CREATEVIEW相同。
2)ALGORITHM:表明视图挑选算法,默许算法是UNDEFINED(未界说的):MySQL主动挑选要运用的算法;merge合并;temptable临时表,一般该参数不显式指定。
3)DEFINER:指出谁是视图的创立者或界说者,假如不指定该选项,则创立视图的用户就是界说者。
4)SQLSECURITY:SQL安全性,默许为DEFINER,关于SQL安全性可参考这篇文章。
5)select_statement:表明select句子,能够从基表或其他视图中进行挑选。
6)WITHCHECKOPTION:表明视图在更新时保证束缚,默许是CASCADED。
其实咱们日常创立视图时,无需指定每个参数,一般情况下,主张这样创立视图:
createview[(column_list)]asselect句子withcheckoption;oracle视图
下面给出几个具体创立示例:
#单表视图mysql>createviewv_F_players(编号,名字,性别,电话)->as->selectPLAYERNO,NAME,SEX,PHONENOfromPLAYERS->whereSEX=’F’->withcheckoption;QueryOK,0rowsaffected(0.00sec)mysql>descv_F_players;+——–+———-+——+—–+———+——-+|Field|Type|Null|Key|Default|Extra|+——–+———-+——+—–+———+——-+|编号|int(11)|NO||NULL|||名字|char(15)|NO||NULL|||性别|char(1)|NO||NULL|||电话|char(13)|YES||NULL||+——–+———-+——+—–+———+——-+4rowsinset(0.00sec)mysql>select*fromv_F_players;+——–+———–+——–+————+|编号|名字|性别|电话|+——–+———–+——–+————+|8|Newcastle|F|070-458458||27|Collins|F|079-234857||28|Collins|F|010-659599||104|Moorman|F|079-987571||112|Bailey|F|010-548745|+——–+———–+——–+————+5rowsinset(0.02sec)#多表视图mysql>createviewv_match->as->selecta.PLAYERNO,a.NAME,MATCHNO,WON,LOST,c.TEAMNO,c.DIVISION->from->PLAYERSa,MATCHESb,TEAMSc->wherea.PLAYERNO=b.PLAYERNOandb.TEAMNO=c.TEAMNO;QueryOK,0rowsaffected(0.03sec)mysql>select*fromv_match;+———-+———–+———+—–+——+——–+———-+|PLAYERNO|NAME|MATCHNO|WON|LOST|TEAMNO|DIVISION|+———-+———–+———+—–+——+——–+———-+|6|Parmenter|1|3|1|1|first||44|Baker|4|3|2|1|first||83|Hope|5|0|3|1|first||112|Bailey|12|1|3|2|second||8|Newcastle|13|0|3|2|second|+———-+———–+———+—–+——+——–+———-+5rowsinset(0.04sec)
视图在运用时和根底表一样,比方咱们能够运用select*fromview_name或select*fromview_namewhere…,视图能够将咱们不需求的数据过滤掉,将相关的列名用咱们自界说的列名替换。视图作为一个拜访接口,不管基表的表结构和表名有多复杂。一般情况下视图只用于查询,视图自身没有数据,因此对视图进行的dml操作最终都体现在基表中,对视图进行delete、update、insert操作,原表同样会更新,drop视图原表不会变,视图不能够truncate。可是一般情况下咱们要防止更新视图,dml操作能够直接对原表进行更新。
3.视图相关最佳实践
下面简略介绍下视图的长处,经过这些长处咱们很容易总结出视图的适用场景。
1)简略:运用视图的用户完全不需求关怀后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的成果集。
2)安全:运用视图的用户只能拜访他们被允许查询的成果集,对表的权限管理并不能限制到某个行某个列,可是经过视图就能够简略的完成。
3)数据独立:一旦视图的结构确定了,能够屏蔽表结构变化对用户的影响,源表添加列对视图没有影响;源表修正列名,则能够经过修正视图来处理,不会形成对拜访者的影响。
总而言之,运用视图的大部分情况是为了保障数据安全性,提高查询效率。比方说咱们常常用到几个表的关联成果,那么咱们就能够运用视图来处理,或许说第三方程序需求调用咱们的业务库,能够按需创立视图给第三方程序查询。
关于日常运用及维护视图的过程中,个人总结出以下几点实践,可供参考:
视图命名主张统一前缀,比方以v_或view_开头,便于辨认。
SQLSECURITY运用默许的DEFINER,表明已视图界说者的权限去查询视图。
视图界说者主张运用相关程序用户。
视图不要关联太多的表,形成数据冗余。
查询视图时要附带条件,不主张每次都查询出一切数据。
视图搬迁要注意在新环境有该视图的界说者用户。
不要直接更新视图中的数据,视图只作查询。
总结:
视图在MySQL中常常会用到,本篇文章介绍了视图的概念以及创立方法,延伸而来,后续又讲述了视图的运用场景及长处。可能在运用时感觉不出视图和表的差异,其实这儿面的门道还有许多,在这儿主张视图只作查询运用,依照规范来,视图会带来很大的快捷。希望这篇文章对你有协助。上篇文章阅览量很不理想,劳烦大家帮忙点下阅览上篇文章。

未经允许不得转载:IT技术网站 » oracle视图(oracle视图和表的区别)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载