oracl中视图和同义词的区别_第1页
oracl中视图和同义词的区别_第2页
oracl中视图和同义词的区别_第3页
oracl中视图和同义词的区别_第4页
oracl中视图和同义词的区别_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页oracl中视图和同义词的区别

一、视图

在之前所学习过的全部的SQL语法之中,查询操作是最麻烦的,假如程序开发人员将大量的精力都糜费在查询的编写上,那么确定影响代码的工作进度,所以一个好的数据库设计人员,除了依据业务的操作设计出数据表之外,还需要为用户提供假设干个视图,而每一个视图包装了一条条繁复的SQL语句,视图的创建语法如下:

CREATE[ORREPLACE]VIEW视图名称

AS子查询;

范例:创建一张视图

CREATEVIEWmyviewASSELECTd.deptno,d.dname,d.loc,COUNT(e.empno)count,AVG(e.sal)avgFROMempe,deptd

WHEREe.deptno(+)=d.deptnoGROUPBYd.deptno,d.dname,d.loc;

现在已经创建好了一张视图,名称为myview,所以现在查询myview:

SELECT*FROMmyview;

此时通过一个简约的视图查询操作,就可以完成之前的繁复SQL语句的功能,所以视图就是包装了SQL查询操作。

范例:创建一张包含简约查询语句的视图

DROPVIEWmyview;CREATEVIEWmyviewASSELECT*FROMempWHEREdeptno=20;

可是以上的操作事实上是属于一个视图的替换操作,所以此时也可以运用另外一种语法:

CREATEORREPLACEVIEWmyviewASSELECT*FROMempWHEREdeptno=20;

此时表示的是,假如视图存在那么替换,不存在那么创建一张新的视图,视图的概念虽然好理解,但是在创建视图的时候存在两个选项。

选项一:WITHCHECKOPTION

上面所创建的视图,是存在一个创建条件的“WHEREdeptno=20”,那么假如现在更新视图中的这个条件呢?

UPDATEmyviewSETdeptno=30WHEREempno=7369;

此时更新的是一张视图,但是视图本身并不是一个详细的数据表,而且现在更新的操作又是视图的创建条件,很明显这样的做法不可取,所以此时为了解决这个问题,可以加入WITHCHECKOPTION;

CREATEORREPLACEVIEWmyviewASSELECT*FROMempWHEREdeptno=20WITHCHECKOPTION;

此时再次执行视图的更新操作,涌现以下错误提示:

ORA-01402:视图WITHCHECKOPTIDNwhere子句违规

意味着现在根本就不能去更新视图的创建条件。

选项二:WITHREADONLY

虽然运用WITHCHECKOPTION可以保证视图的创建条件不被更新,但是其他的字段却允许更新。

UPDATEmyviewSETsal=9000WHEREempno=7369;

与之前的问题一样,视图本身不是详细的真实数据,而是一些查询语句,所以这样的更新并不合理,那么在创建视图的时候建议将其设置为只读视图:

CREATEORREPLACEVIEWmyviewASSELECT*FROMempWHEREdeptno=20WITHREADONLY;

此时再次发出更新的操作,那么径直提示如下错误:

ORA-01733:此处不允许虚拟列

而且肯定要留意的是,以上给出的是一个简约的操作语句视图,假如现在视图中的查询语句是统计操作,那么根本就不可能更新。

CREATEORREPLACEVIEWmyviewASSELECTd.deptno,d.dname,d.loc,COUNT(e.empno)count,AVG(e.sal)avgFROMempe,deptdWHEREe.deptno(+)=d.deptnoGROUPBYd.deptno,d.dname,d.loc;

现在的信息是统计而来的,根本就不可能更新。

在一个项目之中,视图的`数量有可能超过表的数量,由于查询语句会许多的。

二、同义词

同义词就是意思相近的一组词语,对于同义词的操作之前一贯在运用,例如,现在有如下一个查询语句:

SELECTSYSDATEFROMdual;

在之前说过“dual”是一张虚拟表,但是虚拟表也确定应当有它的用户,经过查询可以发觉,这张表是属于SYS用户的,但是这个时候就涌现一个问题,在之前讲解过,不同的用户要想访问其他用户的表,那么需要写上“用户.表名称”,那么为什么此时scott用户访问的时候径直运用dual即可,而不是运用“sys.dual”呢,这个事实上就是同义词的应用,dual表示的是sys.dual的同义词,而同义词在Oracle之中称为SYNONYM,同义词的创建语法如下:

CREATE[PUBLIC]SYSNONYM同义词的名称FOR用户名.表名称;

范例:下面创建一个同义词为myemp,此同义词指向scott.emp

CREATESYNONYMmyempFORscott.emp;

此时创建胜利之后,以后在sys用户中就可以运用myemp这个同义词的名称了,但是这个同义词只适合sys用户一个人运用,其他用户无法运用,由于创建的时候没有运用PUBLIC,假如没有运用,那么表示创建的不是公共同义词。

范例:创建公共同义词

SYNONYMmyemp;SYNONYMmyempscott.emp;

CONNsystem/manager;SELECT*FROMmyemp;

但是同义词也只是Oracle自己的概念,知道就行了。

三、索引

索引的主要功能就是用于提升数据库的操作性能。

下面通过代码分析一个最简约的索引操作的问题;

例如,在之前曾经写过如下的操作语句:

SELECT*FROMempWHEREsal1500;

此时由于在sal上没有设置索引,所以它的查询过程是采纳逐行判断的方式完成的,这种操作随着数据量的上升,那么性能会涌现越来越多的问题,但是假如说将数据排列一下呢?

例如,现在将工作在内存之中形成这样的一种数据结构;

假如现在假设全部的数据都排列成以上的树形结构的话,同样的查询,现在还会查询全部记录吗?只会查询部分。

在Oracle之中创建索引有以下两种方式:

主键约束:假如一张表中的列上存在了主键约束的话,自动创建索引;

手工创建:在某一个操作列上指定一个索引;

范例:在emp.sal字段上创建索引

CREATEINDE*emp_sal_indONemp(sal);

虽然索引创建完成了,但是要想观测出特点基本上是不可能的。

但是这种索引有一个最大的问题,即:假如要想实现性能的提高,那么需要始终维持以上的一棵树,那么假如说现在这棵树上的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论