`
changhongbao
  • 浏览: 123933 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle笔记(十三) 视图、同义词、索引

 
阅读更多

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] SYSNONYM 同义词的名称 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树索引,还有位图索引,反向索引,函数索引等等。

分享到:
评论

相关推荐

    oracle学习笔记(从入门到精通)

    06-同义词和序列学习笔记.txt 07-视图和索引学习笔记.txt 08-PLSQL和游标结合学习笔记.txt 09-游标学习笔记.txt 10-重要的函数的学习笔记.txt 11-存储过程学习笔记.txt 12-触发器学习笔记.txt 13-pl编码.txt

    6索引视图序列同义词锁数据字典动态视图笔记.sql

    小白必看!

    2011MLDN李兴华Oracle课堂笔记PDF档

    6. **05-视图、索引、备份、同义词、设计范式、设计工具、案例.pdf**:这部分内容更为深入,涵盖了数据库设计的高级主题,如视图的创建和使用,提高查询性能的索引,数据的安全备份策略,数据库对象的同义词,以及...

    Oracle数据库学习笔记 四

    本篇笔记主要探讨了Oracle数据库中的一些关键概念,包括数据定义语言(DDL)、锁机制、分区、同义词、序列、视图以及索引。 1. **数据定义语言 (DDL)**: DDL是SQL的一部分,用于创建和修改数据库对象,如表格、视图...

    Oracle 10g 学习笔记

    │ 小功能,大作用 --- Oracle里的关键字& - 三十而立专栏 - CSDN博客.mht │ 经典SQL语句收集(ORACLE).mht │ 融会贯通Oracle数据库的25条基本知识.txt │ 详细讲解Oracle服务器的常用命令行.mht │ └─资料 ...

    Oracle 超强学习笔记

    Oracle数据库包含多种对象,如表、视图、索引、序列、同义词、存储过程和触发器等。理解这些对象的创建、修改和删除操作是数据库管理的重要部分。 6. **数据库安全** Oracle提供了精细的权限和角色机制,通过...

    21天学通Oracle_学习笔记.docx

    Oracle 数据表对象是 Oracle 数据库的基本组件,包括表、索引、视图、序列、同义词等。 表是 Oracle 数据库的基本存储结构,索引是提高查询效率的数据结构,视图是虚拟的表结构,序列是自动增长的数字列,同义词是...

    Oracle笔记

    - 视图和同义词可以作为安全机制的一部分,隐藏底层表结构。 7. **备份与恢复**: - 冷备份与热备份:在数据库不运行或运行状态下进行数据文件的复制。 - RMAN(Recovery Manager):Oracle提供的备份和恢复工具...

    oracle学习笔记.doc

    本文将基于“Oracle学习笔记”进行深入解析,主要涵盖Oracle的基础概念、数据文件管理、SGA组件、数据库启动与关闭、用户管理、SQL*Plus命令、视图以及同义词。 1. **数据文件管理**: - 数据文件(Datafile)是...

    Oracle 笔记.docx

    - **同义词**:用于简化对象名或隐藏对象的实际位置。 - **索引**:加快数据检索速度。 - **网络配置**:设置监听器和网络服务名,以便远程访问数据库。 - **嵌套表与可变数组**:用于存储多值字段的数据结构。 ...

    Oracle数据库学习笔记

    Oracle数据库学习笔记,包括课程PPT(数据库基础,简单查询,单行多行函数,多表连接,子查询,高级子查询,集合运算,层次查询,DML与事务控制,数据库的网络连接,创建维护表,约束,视图,序列索引和同义词,用户...

    Oracle培训18天笔记

    3. 视图与同义词:理解视图的作用,创建和使用同义词来简化数据库访问。 第十一至十三天:数据库管理 1. 数据库备份与恢复:了解RMAN(Recovery Manager)和数据泵(Data Pump)工具,学习备份策略。 2. 性能优化:...

    oracle随堂笔记

    4. **数据库对象**:Oracle支持多种数据库对象,如表、索引、视图、序列、同义词、存储过程、函数、触发器和包。每个对象都有其特定的作用和使用场景。 5. **数据类型**:Oracle提供了丰富的数据类型,如CHAR、...

    oracle所有知识点笔记(全)

    这是我自己学习oracle的时候,写的代码案例和笔记,基本上每一个知识点都写的很清楚!大家可以作为参考!...运算符,多表联查,排序,组函数,序列,索引,同义词, 约束,创建和管理表,单行函数,过滤数据等等

    oracle培训18天老师笔记

    5. **数据库对象**:包括视图、序列、同义词、存储过程、函数、触发器等,这些对象在数据库设计和管理中的作用和创建方法。 6. **数据库安全**:涉及用户管理、权限和角色的分配、权限的继承和撤销,以及审计功能。...

    oracle笔记二--plsql 编程.txt

    - **公共同义词**:为了使所有用户都能访问执行计划表,可以创建一个公共同义词: ```sql SQL> CREATE PUBLIC SYNONYM plan_table FOR plan_table; SQL> GRANT ALL ON plan_table TO PUBLIC; ``` - **授予...

    Oracle11gOCP-051干货笔记

    - **同义词**:提供别名,简化数据库对象引用。 - **序列**:自增序列号,常用于主键生成。 - **外部表**:连接外部数据源,如文件系统,实现大数据的集成。 **第三部分:SQL语言的扩展** - **INSERT语句**:详细...

Global site tag (gtag.js) - Google Analytics