Oracle笔记(十三) 视图、同义词、索引
一、视图
在之前所学习过的所有的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笔记(十三) 视图、同义词、索引相关推荐
- Oracle总结【视图、索引、事务、用户权限、批量操作】
前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了-那么本篇主要总结关于Oralce视图.序列.事务的一些内容- 在数据库中,我们可以把各种的SQL语句分为四大类- (1 ...
- Oracle→序列、视图、索引、存储过程、存储函数、包、触发器、表分区、锁表解锁表、事务、PLSQL、备份恢复、游标
序列SEQUENCE 视图VIEW 索引 同义词 存储过程 存储函数 包 JAVA调用包 触发器 表分区 锁表解锁表 事务 PLSQL 备份恢复
- oracle查看物化视图的索引,oracle – 物化视图中的域索引返回零行
我有Oracle DB的问题 – 在物化视图上通过CONTAINS()搜索后,域索引返回零行.我看到物化视图充满了数据,我还使用过程ctx_ddl.sync_index()进行域索引同步. 什么有用: ...
- Oracle学习:视图与索引
一.视图 1.视图的概念:从表中抽出的逻辑上相关的数据集合 2.视图的特点: (1)视图是基于表(selete 产生的表): (2)视图是逻辑概念: (3)视图本身没有数据 3.视图的作用:可以简化查 ...
- Oracle 实验5 视图与索引
一.实验目的 1.掌握视图的创建.修改.删除.查询. 2.掌握索引的创建.删除. 二.实验内容 1.写出创建满足下述要求的视图. (1)查询学生的学号.姓名.所在系.课程号.课程名.课程学分. (2) ...
- Mysql第四天笔记04——视图和索引
目录 1.为什么要使用视图 2.视图分类 3.创建视图 4.修改视图 5.视图上执行DML操作 6.索引 1.为什么要使用视图 限制其它用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分 ...
- Oracle 学习笔记 12 -- 序列、索引、同义词
数据库的对象包括:表.视图.序列.索引和同义词.在前面的笔记中陆续学习了表和视图,那么本次笔记将学习剩 下的数据库对象,即:序列.索引和同义词. 序列:提供有规律的数值.可供多个用户用来产生唯一数值的 ...
- Oracle数据库之对象视图、索引、序列、同义词
Oracle数据库总结: Oracle数据库之集合运算 Oracle数据库之数据处理 Oracle数据库之建表和管理表 Oracle数据库之对象视图.索引.序列.同义词 视图: 语法: create ...
- Oracle数据库的视图、物化视图、序列、同义词、索引
Oracle数据库对象 视图 物化视图 序列 同义词 索引 注:以下数据库对象中, 物化视图.序列.同义词为Oracle数据库特有 视图 含义:视图是一种数据库对象,是从一个或者多个数据表或视图中导出 ...
- oracle 视图、索引、序列、同义词
目录 1.视图对象 1.1创建视图 1)简单视图 2)建立只读视图 3)复杂视图 1.2管理视图 1)查看视图定义 2)修改视图定义 3)重新编译视图 4)删除视图 2.索引 2.1索引概述 2.2创 ...
最新文章
- 卷积、傅立叶变换、拉普拉斯变换、Z变换
- Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据
- CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之《极限男人帮》和《NBA全明星球员》
- java的两种运行方式Applet和Application你真的懂吗
- Python中的If,Elif和Else语句
- 前端学习(1153):常量const01
- 打印系统开发(42)——静默打印
- My Sixth-First - 解数独 - By Nicolas
- 时频分析工具箱典型函数的使用
- 姓名:孔盼 学号:2103101015 桃花岛——盼<>盼
- 演出经纪人考试大纲、演出经纪人考试资料是什么?
- 求职招聘微信小程序源码下载v4.1.78 修复首页授权空白问题
- ESP-WHO code_recognition 使用指南
- vb 回车换行符 分割 字符串
- 求绝对值最大值 -java求绝对值
- Unix操作系统历史
- windows命令行关闭已占用的端口
- iOS动画——弹窗动画(pop动画)
- java编程基础答案_Java编程基础答案试题题目及答案,期末考试题库,章节测验答案...
- 抖音短视频所有问题的详细攻略——今抖云创
热门文章
- oracle ocr组成员替换,Oracle RAC 迁移替换 OCR 盘
- idea缩写快捷键_idea快捷键大全
- 如何利用 nbconvert将 IPYNB文档转换 Markdown文档?
- 怎么在CSDN中写微信公众号推文?
- 第十六届全国大学智能车竞赛华南赛区成绩汇总
- 2021年春季学期-信号与系统-第十次作业参考答案-第四小题
- ZHUOQING 发表论文整理
- 第十五届智能车竞赛东北赛区普通四轮组冠军车-哈尔滨工业大学-紫丁香
- vc 文本框 只显示下划线_【Axure9百例】36.文本框搜索自动匹配
- android 多个应用,Android中一个应用实现多个图标的几种方式