本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

**转载请注明 出自 : luogg的博客园 ** 谢谢配合!

day 06 视图,索引,序列

视图

什么是视图:

视图是基于一个或多个表或视图的逻辑表,视图本身并不包含数据,但是却像一个窗口,通过它可以查询或修改表中的数据。视图所基于的表称为基表,视图是存储在数据字典中的一条SELECT SQL语句。

视图优点:

  • 限制对数据的访问,因为视图可以有选择性地显示数据库的一部分。
  • 视图可以简化复杂的查询, 但不能提高性能 .
  • 维护数据的独立性,尤其是对用户和应用程序来说,视图可以从多个表简述数据

视图分类

  • 简单视图: 基于单个表创建, 不包含任何函数,表达式以及分组
  • 复杂视图: 包含函数,表达式或者分组的视图, 简化了查询操作
  • 连接视图: 基于多个表建立的视图, 简化了连接查询
  • 只读视图: 只允许Selwct 操作,不允许DML操作

创建一个简单视图

CREATE VIEW v_emp AS SELECT * from copy_emp;

CREATE [OR REPLACE] VIEW 视图名 [(alias[,alias]…)] (alias指定视图别名)
AS subquery(子查询)
[WITH CHECK OPTION[CONSTRAINT constraint]](定义约束)
[WITH READ ONLY](只读);

设置视图的可见字段(OR REPLACE可以在创建视图时候不用删除已存在的视图便更改视图)

CREATE OR REPLACE VIEW v_emp AS SELECT first_name,last_name, salary from copy_emp;

修改视图 , 给Donald 工资涨400

UPDATE V_EMP SET SALARY=SALARY+400 WHERE FIRST_NAME='Donald';

增加一条记录

INSERT INTO v_emp(first_name,last_name,email,hire_date,job_id,salary) VALUES('Yan','Luogg','111',sysdate,'IT_PROG','8000');

给视图字段重命名: 两种方法

方法一 : CREATE OR REPLACE VIEW v_emp AS SELECT first_name || ',' || last_name "姓名", salary "工资" from copy_emp;

方法二 : CREATE OR REPLACE VIEW v_emp("姓名","工资","入职时间") AS SELECT first_name , salary,hire_date from copy_emp;


查看系统视图的详细信息 : select * from user_views where view_name=UPPER('v_emp');

查询视图中是否可以执行DML操作 : select * from user_updatable_columns where table_name=upper('v_emp');

删除视图 : DROP VIEW V_EMP;

只读视图 with read onluy

CREATE OR REPLACE VIEW v_emp AS SELECT * from copy_emp WITH READ ONLY;

select * from user_updatable_columns where table_name=upper('v_emp');--全部为no,不能增删改查

定义约束 with check option

 例:
create view view2 as select * from emp where deptno=10 with check option;
只对插入与删除与更新有意义。
例:
insert into view2 values( ….., 10);  正确
insert into view2 values( ….., 20);  失败 这个选项表示:
通过本视图插入更新删除时,要遵循SQL语句中定义的限制,这里只限定了10号部门,所以只能插入10号部门。

序列

序列的产生 :

  • 系统自动生成的、不重复的整数值
  • 序列是一种数据库对象,可以被多个用户共享
  • 典型用途是作为主键值,它对于每一行必须是唯一的
  • 序列可以替代应用程序编号
  • 可以对序列值进行缓冲存储,以提高访问效率

创建序列 :

CREATE SEQUENCE 序列名称
[INCREMENT BY n](序列直接间隔,默认为1)
[START WITH n](起始序列值,默认为1)
[{MAXVALUE n | NOMAXVALUE}](指定最大序列值|指定最大序列值为10的27次方)
[{MINVALUE n | NOMINVALUE}](指定最小序列值|指定最小序列值为1)
[{CYCLE | NOCYCLE}](达到最大或最小值之后循环)
[{CACHE n | NOCACHE(内存中可以预分配的序列个数,默认值:20)
)
例如:
--创建一个从100开始的递减序列
create sequence emp_ind3
start with 100
INCREMENT BY -1
MINVALUE 1
MAXVALUE 100;

pl/sqldeveloper 中也可以鼠标点击sequence 直接创建序列

查询序列信息(通过字典表):

select * from user_sequences;

	序列的两个伪列:nextval、currval
NEXTVAL用于返回序列下一个可获取的序列值,必须在NEXTVAL前用序列名作前缀。
CURRVAL用于提取当前用户产生的序列值,必须在CURRVAL前加序列名称。
select myseq.nextval from dual;
select myseq.currval from dual;
刚创建的序列,第一次只能访问nextval。
如果先使用curval,就会报错:
select mysql.currval from dual;
ORA-0802:序列 MYSEQ.CURRVAL 尚未在此会话中定义。 正常使用:
select myseq.nextval from dual; --> 1
select myseq.nextval from dual; --> 2
select myseq.currval from dual; --> 2
每次查询nextval都会导致序列的指针向后移支一次。

删除序列

DROP SEQUENCE sequence_name;


索引

索引概念:

  • 一种用于提升查询效率的数据库对象
  • Oracle数据库自动使用和维护索引
  • 通过快速定位数据的方法,减少磁盘I/O操作
  • 索引信息与表独立存放

分类 :

  • 单列索引 : 基于一列建立的索引, CREATE INDEX emp_idx1 ON emp(ename,job);
  • 复合索引 : 基于两列或多列的索引, CREATE INDEX emp_idx1 ON emp(ename,job);
  • 唯一索引 : 列值不能重复(当定义主键和唯一约束是,oracle会自动在约束列上创建唯一索引)
  • 非唯一索引 : 列值可以重复的索引

创建索引的原则:

  1. 字段取值分布范围很广
  2. 字段中包含大量空值
  3. 字段经常出现在where子句或连接条件中
  4. 表经常被访问、数据量很大,且通常每次访问的数据量小于记录

不适合建索引的情况:

  1. 表很小
  2. 字段不经常出现在where子句中
  3. 每次访问的数据量大于记录总数的2%~4%
  4. 表经常更新

创建索引 :

CREATE [UNIQUE] INDEX index_name

on table_name (column|,column|…);

例子: create index myindex on t_emp(ename);

删除索引:drop index index_name;

单列索引的使用 :

CREATE INDEX i_ename ON emp(ename);--建立单列索引

在建立了i_ename之后,如果在WHERE 子句中引用

Ename列,会自动使用该索引。

SELECT * FROM EMP WHERE ename=‘’;

UPDATE EMP SET sal = 3000 WHERE ename=‘’;

DELETE FROM EMP WHERE ename=‘’;

复合索引使用 :

复合索引基于多个列建立索引。如果在WHERE 子句中需要经常引用一个表的多列定位数据,那么考虑在这些列上建立复合索引. 建立复合索引时不能超过32个。

CREATE INDEX i_deptno_job ON emp(deptno,job);

SELECT * FROM EMP WHERE deptno=‘’ AND job=‘’;

SELECT * FROM EMP WHERE deptno=‘’

注意:

如果在WHERE 子句中使用OR引用deptno和job列或单独引用job列就不会引用索引. 要想引用复合索引, 那么where后边的顺序按索引建立的顺序,或者只引用第一个索引

如:

SELECT * FROM EMP WHERE deptno=‘’ OR job=‘’;

SELECT * FROM EMP WHERE job=‘’

注意:

两个索引,字段相同,但顺序不同,那么这两个索引不是同一个索引.

例如:

CREATE INDEX EMP_INDEX2 ON COPY_EMP(EMPLOYEE_ID,JOB_ID);

CREATE INDEX EMP_INDEX3 ON COPY_EMP(JOB_ID,EMPLOYEE_ID);

EMP_INDEX2和EMP_INDEX3不相同.

索引信息的查询

  1. SELECT * FROM User_Indexes; --查看当前用户所有表的索引
  2. SELECT * FROM User_Indexes WHERE table_name = UPPER('copy_emp');

    -- 查看copy_emp这张表有多少索引
  3. SELECT * FROM User_Ind_Columns; --查看当前用户所有索引所在的列
  4. SELECT * FROM User_Ind_Columns WHERE table_name = UPPER('copy_emp');--查看表copy_emp中的索引所在的列

Oracle学习总结_day06_视图&序列&索引的更多相关文章

  1. Oracle学习(十):视图,索引,序列号,同义词

    1.知识点:能够对比以下的录屏进行阅读 视图,序列,索引,同义词 SQL> --视图:虚表 SQL> --视图的长处:简化复杂查询.限制数据訪问(银行用的多).提供数据的相互独立.相同的数 ...

  2. Oracle入门基础(十)一一数据库其他对象-视图/序列/索引/同义词

    SQL> --视图 SQL> create view empinfoview as select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname ...

  3. Oracle 学习笔记 11 -- 视图 (VIEW)

    本次必须学习一个全新的概念-- 视图 (VIEW).在前面的笔记中曾提到过,数据对象包含:表.视图.序列.索引和同义词.前面的笔记都是对表的想剖析,那么本次笔记就对视图的世界进行深入的剖析. 视图是通 ...

  4. oracle学习篇十二:索引

    索引: 查询User_indexes可以获取有关用户已创建的索引的详细信息. 查询User_ind_partitions可以获取有关用户已创建的分区索引的详细信息. 查询User_ind_column ...

  5. oracle学习篇十:序列

    序列:是用来生成唯一.连续的整数的数据库对象.序列通常用来自动生成主键或唯一键的值. 1. 创建序列语法如下: Create SEQUENCE sequence_name [START WITH in ...

  6. oracle数据库表约束、视图、索引—该记录为本人以前微博的文章

    一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束--- ...

  7. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词

    数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...

  8. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词

    数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...

  9. Oracle视图,索引,序列

    什么是视图[View] (1)视图是一种虚表 (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表(3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELEC ...

随机推荐

  1. [.net 面向对象程序设计深入](0) 开篇

    [.net 面向对象程序设计深入](0)开篇        [.net 面向对象编程基础]和 [.net 面向对象程序设计进阶]在15年底写完了,群里也加进来不少热爱学习的小伙伴.让我深切感受到在这个 ...

  2. 【VC++技术杂谈007】使用GDI+进行图片格式转换

    本文主要介绍如何使用GDI+对图片进行格式转换,可以转换的图片格式为bmp.jpg.png. 1.加载GDI+库 GDI+是GDI图形库的一个增强版本,提供了一系列Visual C++ API.为了使 ...

  3. .NET 基础 一步步 一幕幕 [前言]

    .NET 基础 一步步 一幕幕 [前言部分] 本人小白一枚,虽然说从去年就开通博客了,到现在也没有写多少东东,虽然工作了,也没有更好得总结.故此重新祭出博客园法宝,修炼技术,争取早日走上大神之位. 故 ...

  4. C# Azure 存储-分布式缓存Redis在session中的配置

    1. 开始 对于分布式的缓存,平常的session的处理是一个用户对应一台分布式的机器,如果这台机器中途挂机或者不能处理这个用户session的情况发生,则此用户的session会丢失,会发生不可预知 ...

  5. iOS-----Crash文件分析(一)

    开发程序的过程中不管我们已经如何小心,总是会在不经意间遇到程序闪退.脑补一下当你在一群人面前自信的拿着你的App做功能预演的时候,流畅的操作被无情地Crash打断.联想起老罗在发布Smartisan ...

  6. 自定义函数执行动态sql语句

    --函数中不能调用动态SQL,使用用存储过程吧.如果还要对函数做其他操作,换成存储过程不方便,可以考虑把其他操作一起封装在存储过程里面.如:   create proc [dbo].[FUN_YSCL ...

  7. JAVA集合

    为了保存数量不确定的数据或者提供映射关系的数据,Java提供了集合类,也称作集合类,Collection和Map分别为两个根接口.两个接口体系的继承系如下图 (图片来源于网络) Collection接 ...

  8. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据

    我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...

  9. Windows 搭建 .NET 跨平台环境并运行应用程序

    写在前面 阅读目录: Install .NET Version Manager (DNVM) Install .NET Core Execution Environment (DNX) Write t ...

  10. Hive Tutorial(上)(Hive 入门指导)

    用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...