一、视图

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

CREATE [OR REPLACE] VIEW 视图名称

  AS 子查询;

范例:创建一张视图

CREATE VIEW myview AS

SELECT d.deptno,d.dname,d.loc,COUNT(e.empno) count,AVG(e.sal) avg

FROM emp e,dept d

  WHERE e.deptno(+)=d.deptno

  GROUP BY d.deptno,d.dname,d.loc;

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

SELECT * FROM myview;

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

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

DROP VIEW myview;

CREATE VIEW myview AS

SELECT*FROM emp WHERE deptno=20;

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

CREATE OR REPLACE VIEW myview AS

SELECT * FROM emp WHERE deptno=20;

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

  • 选项一:WITH CHECK OPTION

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

UPDATE myview SET deptno=30 WHERE empno=7369;

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

CREATE OR REPLACE VIEW myview AS

SELECT*FROM emp WHERE deptno=20 WITH CHECK OPTION;

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

ORA-01402: 视图 WITH CHECK OPTIDN where 子句违规

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

  • 选项二:WITH READ ONLY

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

UPDATE myview SET sal=9000 WHERE empno=7369;

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

CREATE OR REPLACE VIEW myview AS

SELECT * FROM emp WHERE deptno=20 WITH READ ONLY;

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

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

而且一定要注意的是,以上给出的是一个简单的操作语句视图,如果现在视图中的查询语句是统计操作,则根本就不可能更新。

CREATE OR REPLACE VIEW myview AS

  SELECT d.deptno,d.dname,d.loc,COUNT(e.empno) count,AVG(e.sal) avg

FROM emp e,dept d

  WHERE e.deptno(+)=d.deptno

  GROUP BY d.deptno,d.dname,d.loc;

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

在一个项目之中,视图的数量有可能超过表的数量,因为查询语句会很多的。



二、同义词

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

SELECT SYSDATE FROM dual;

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

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

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

CREATE SYNONYM myemp FOR scott.emp;

此时创建成功之后,以后在sys用户中就可以使用myemp这个同义词的名称了,但是这个同义词只适合sys用户一个人使用,其他用户无法使用,因为创建的时候没有使用PUBLIC,如果没有使用,则表示创建的不是公共同义词。

范例:创建公共同义词

CONN sys/change_on_install AS SYSDBA;

DROP SYNONYM myemp;

CREATE PUBLIC SYNONYM myemp FOR scott.emp;

CONN system/manager;

SELECT * FROM myemp;

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



三、索引

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

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

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

SELECT * FROM emp WHERE sal>1500;

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

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

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

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

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

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

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

CREATE INDEX emp_sal_ind ON emp(sal);

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

但是这种索引有一个最大的问题,即:如果要想实现性能的提高,则必须始终维持以上的一棵树,那么如果说现在这棵树上的数据需要频繁修改的话,则代码的性能肯定会有所降低。

所以一般索引只使用在不会频繁修改的表中,而如果一张表上频繁修改数据且又使用了索引的话,性能肯定会严重降低,所以性能的提升永远都是相对的。

以上的索引只是Oracle十几种索引中的一种,也是最简单的一种,称为B树索引,还有位图索引,反向索引,函数索引等等。

转载于:https://blog.51cto.com/jiangzhi2013/1248484

Oracle笔记(十三) 视图、同义词、索引相关推荐

  1. Oracle总结【视图、索引、事务、用户权限、批量操作】

    前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了-那么本篇主要总结关于Oralce视图.序列.事务的一些内容- 在数据库中,我们可以把各种的SQL语句分为四大类- (1 ...

  2. Oracle→序列、视图、索引、存储过程、存储函数、包、触发器、表分区、锁表解锁表、事务、PLSQL、备份恢复、游标

    序列SEQUENCE 视图VIEW 索引 同义词 存储过程 存储函数 包 JAVA调用包 触发器 表分区 锁表解锁表 事务 PLSQL 备份恢复

  3. oracle查看物化视图的索引,oracle – 物化视图中的域索引返回零行

    我有Oracle DB的问题 – 在物化视图上通过CONTAINS()搜索后,域索引返回零行.我看到物化视图充满了数据,我还使用过程ctx_ddl.sync_index()进行域索引同步. 什么有用: ...

  4. Oracle学习:视图与索引

    一.视图 1.视图的概念:从表中抽出的逻辑上相关的数据集合 2.视图的特点: (1)视图是基于表(selete 产生的表): (2)视图是逻辑概念: (3)视图本身没有数据 3.视图的作用:可以简化查 ...

  5. Oracle 实验5 视图与索引

    一.实验目的 1.掌握视图的创建.修改.删除.查询. 2.掌握索引的创建.删除. 二.实验内容 1.写出创建满足下述要求的视图. (1)查询学生的学号.姓名.所在系.课程号.课程名.课程学分. (2) ...

  6. Mysql第四天笔记04——视图和索引

    目录 1.为什么要使用视图 2.视图分类 3.创建视图 4.修改视图 5.视图上执行DML操作 6.索引 1.为什么要使用视图 限制其它用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分 ...

  7. Oracle 学习笔记 12 -- 序列、索引、同义词

    数据库的对象包括:表.视图.序列.索引和同义词.在前面的笔记中陆续学习了表和视图,那么本次笔记将学习剩 下的数据库对象,即:序列.索引和同义词. 序列:提供有规律的数值.可供多个用户用来产生唯一数值的 ...

  8. Oracle数据库之对象视图、索引、序列、同义词

    Oracle数据库总结: Oracle数据库之集合运算 Oracle数据库之数据处理 Oracle数据库之建表和管理表 Oracle数据库之对象视图.索引.序列.同义词 视图: 语法: create ...

  9. Oracle数据库的视图、物化视图、序列、同义词、索引

    Oracle数据库对象 视图 物化视图 序列 同义词 索引 注:以下数据库对象中, 物化视图.序列.同义词为Oracle数据库特有 视图 含义:视图是一种数据库对象,是从一个或者多个数据表或视图中导出 ...

  10. oracle 视图、索引、序列、同义词

    目录 1.视图对象 1.1创建视图 1)简单视图 2)建立只读视图 3)复杂视图 1.2管理视图 1)查看视图定义 2)修改视图定义 3)重新编译视图 4)删除视图 2.索引 2.1索引概述 2.2创 ...

最新文章

  1. 卷积、傅立叶变换、拉普拉斯变换、Z变换
  2. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据
  3. CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之《极限男人帮》和《NBA全明星球员》
  4. java的两种运行方式Applet和Application你真的懂吗
  5. Python中的If,Elif和Else语句
  6. 前端学习(1153):常量const01
  7. 打印系统开发(42)——静默打印
  8. My Sixth-First - 解数独 - By Nicolas
  9. 时频分析工具箱典型函数的使用
  10. 姓名:孔盼 学号:2103101015 桃花岛——盼<>盼
  11. 演出经纪人考试大纲、演出经纪人考试资料是什么?
  12. 求职招聘微信小程序源码下载v4.1.78 修复首页授权空白问题
  13. ESP-WHO code_recognition 使用指南
  14. vb 回车换行符 分割 字符串
  15. 求绝对值最大值 -java求绝对值
  16. Unix操作系统历史
  17. windows命令行关闭已占用的端口
  18. iOS动画——弹窗动画(pop动画)
  19. java编程基础答案_Java编程基础答案试题题目及答案,期末考试题库,章节测验答案...
  20. 抖音短视频所有问题的详细攻略——今抖云创

热门文章

  1. oracle ocr组成员替换,Oracle RAC 迁移替换 OCR 盘
  2. idea缩写快捷键_idea快捷键大全
  3. 如何利用 nbconvert将 IPYNB文档转换 Markdown文档?
  4. 怎么在CSDN中写微信公众号推文?
  5. 第十六届全国大学智能车竞赛华南赛区成绩汇总
  6. 2021年春季学期-信号与系统-第十次作业参考答案-第四小题
  7. ZHUOQING 发表论文整理
  8. 第十五届智能车竞赛东北赛区普通四轮组冠军车-哈尔滨工业大学-紫丁香
  9. vc 文本框 只显示下划线_【Axure9百例】36.文本框搜索自动匹配
  10. android 多个应用,Android中一个应用实现多个图标的几种方式