序列

Oracle 12C 之后,Oracle 之中提供的是一种手工的自动增长列控制,
而这样的控制在 Oracle 之中使用序列(对象)完成。

序列的创建:

CREATE SEQUENCE 序列名称
[INCREMENT BY 步长] [START WITH 开始值]
[MAXVALUE 最大值 | NOMAXVALUE]
[MINVALUE 最小值 | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE 缓存大小 | NOCACHE]
在此数据字典之中主要包含如下列的数据信息:
· SEQUENCE_NAME:表示的序列名称;
· MIN_VALUE:表示序列的最小值,默认的序列最小值是 1;
· MAX_VALUE:表示序列的最大值,默认序列是没有最大值,1028已经很大了。
· INCREMENT_BY:步长,每次增长的数据,默认的是 1;
· CYCLE:是否为循环序列,如果是 N 表示非循环,如果是 Y 表示循环;
· ORDER:表示序列是否排序;
· CACHE_SIZE:序列的缓存数据;
· LAST_NUMBER:序列最后一次的增长值(缓存中最大的值)。
当一个序列对象已经创建完成之后,可以采用如下的两个伪列来进行序列的控制:
· 取得序列下一个增长数据(每次调用序列值都增长指定的步长):序列.nextval
· 取得序列的当前数据(每次调用序列都不增长):序列.currval
· 在使用 currval 之前一定要首先使用 nextval,否则会出现“ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此
会话中定义”。

可是该如何实现行的自动编号呢?

DROP TABLE mytab PURGE ;
CREATE TABLE mytab(
mid NUMBER ,
title VARCHAR2(50) ,
CONSTRAINT pk_mid PRIMARY KEY(mid)
) ;
INSERT INTO mytab(mid,title) VALUES (myseq.nextval,'JAVA') ;

循环序列:

1、3、5、7、9 五个数据之间循环显示

  1. 序列的最大值是 9;
  2. 序列的最小值是 1;
  3. 步长应该为2;
DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq
INCREMENT BY 2
START WITH 1
MAXVALUE 9 MINVALUE 1
CYCLE NOCACHE;

oracle 12c新特性

 CREATE TABLE test1 (
  id int GENERATED ALWAYS AS IDENTITY
);

自增列会自动加上 not null 约束。

新增时不能向自增列插入值。

视图

视图就是包装了一条复杂的 SQL 语句。

创建视图:

CREATE [OR REPLACE] VIEW 视图名称 AS 子查询
[WITH CHECK OPTIONI] [WITH READ ONLY] ;
注意:从 Oracle 10g R2 版本之后出现了一个创建视图的权限问题,在这之前,scott 用户本身是具备有创建视图权限的,
但是之后就没有了,那么下面首先执行如下的语句,来实现权限的分配:GRANT CREATE VIEW TO scott ;
查看所有视图对象。
SELECT * FROM user_views ;

当使用“CREATE OR REPLACE”创建视图的时候表示的是如果视图不存在则创建一个新的视图,如果视图存在

则直接使用新的子查询,替换掉旧的子查询。

实际工作之中,一定要本着一个原则:“视图只能够用于查询,而不要用于任何更新”。

1、 避免视图创建条件更新:WITH CHECK OPTION

2、 设置只读视图:WITH READ ONLY

 索引

Oracle 的索引相当复杂,有几十种索引。索引的主要功能是进行数据查询优化的,提升数据库操作性能的。

为了更好的观察出性能问题,那么下面首先针对于一些查询做一个分析。
范例:查询所有工资高于 3000 的雇员工资
SELECT * FROM emp WHERE sal>3000 ;
但是现在这个代码严格来讲性能是很差的,如果要想观察出性能(提示信息)问题,那么需要打开查询分析器。
CONN sys/change_on_install AS SYSDBA ;
SET AUTOTRACE ON ;
SELECT * FROM myemp WHERE sal>3000 ;
此时为了观察出问题只能够在 sys 用户下观察查询的情况,可以发现此时的查询采用的是“TABLE ACCESS FULL”
(全表扫描,逐行扫描)。那么这样的查询有可能出现这样一个问题。
假设现在 emp 表之中存在有 50W 条记录,而在第 20W 条记录之后就不会再有满足条件的数据了(sal>3000),但是
如果是全表扫描,意味着,要继续查询后面的 30W 行记录,而且都是逐行扫描(逐行判断),那么性能一定不能高。
此时,如果要想解决此问题,那么唯一的途径就是数据排序,按照工资排序,但是这个时候的排序不是简单的由高
到低的排序。那么现在唯一的方式是按照“树”的形式保存排序数据。
现在假设数据表之中所包含的数据顺序如下:“1500、1250、2850、3000、2450、2975、1100、950、800、1600、5000”。
数据检索的时候一定是查询工资数据,而后由工资数据找到对应的数据记录
那么此时如果存在了这样树的结构,在进行数据查询的时候就不再需要进行全表扫描的操作了,
只需要查询部分数据即可,而这样的操作就可以称为索引

在 Oracle 数据库里面如果要想创建索引有两种方式:

  1. 当一个列上设置了主键约束或者是唯一约束的时候会自动的创建索引;
  2. 用户可以自己通过语法在指定的列上创建索引。

CREATE INDEX emp_sal_ind ON emp(sal)

此时索引创建完成。随后再次进行 sal 查询的时候显示的不再是全表扫描,而是根据一个基数扫描。那么通过索引的

查询可以明显的提升查询性能,而索引实现的关键是这棵树的维护(树是由 Oracle 内部自行维护的)。

那么继续以本程序为例,如果说此时修改了某些雇员的工资呢?那么这棵树一定要发生变化,所有的数据都需要重新排列。

那么此时配置的索引不仅没有提升性能,反而降低了性能,所以索引是一种相对的手段,而且永恒都要记住,没有绝对的性能提升途径。

同义词

果要想创建属于自己的同义词,则必须由管理员完成,而创建的语法如下:
CREATE [PUBLIC] SYNONYM 同义词的名称 FOR 用户名.表名称;
范例:将 scott.emp 表定义一个 myemp 的同义词(由 sys 完成)
CONN sys/change_on_install AS SYSDBA ;
CREATE SYNONYM myemp FOR scott.emp ;
创建完同义词之后,下面就可以直接通过 myemp 来访问 scott.emp 数据表了。
SELECT * FROM myemp ;
那么现在创建的同义词 myemp 存在一个小问题。因为此时的同义词只能够在 sys 下使用,它并不是一个公共的同义
词,所以要想让所有用户都访问,则必须创建公共同义词。
范例:修改同义词的创建
CONN sys/change_on_install AS SYSDBA ;
DROP SYNONYM myemp ;
CREATE PUBLIC SYNONYM myemp FOR scott.emp ;
在实际的工作之中,同义词本身只属于 Oracle 自己的概念定义,所以此处只需要了解下基本概念即可。

oracle 序列 视图 索引 同义词的更多相关文章

  1. Oracle数据库对象(表空间/同义词/序列/视图/索引)

    数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...

  2. Oracle序列和索引

    序列和索引 一.序列 1.序列的概念: 序列(Sequence)是用来生成连续的整数数据的对象.它常常用来作为主键的增长列,可以升序,也可以降序. 2.创建序列: 语法:创建序列           ...

  3. Oracle中视图和同义词的区别

    视图和同义词分别都是数据库中的对象名称,它们都不对应实际的数据存储,都依赖其他对象的存在而存在.视图:视图可以被看成是虚拟表或存储查询.除非是索引视图,否则视图的数据不会作为非重复对象存储在数据库中. ...

  4. Oracle——序列、索引、同义词

    一.常见的数据库对象 二.序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 ①.创建序列 CREATE SEQ ...

  5. ORACLE 创建视图索引序列

    /* 视图View 视图是从若干基本表和(或)其他视图构造出来的表 视图存放的都是查询语句,并没有真实的数据 虚表 作用 限制对数据的操作 复杂查询变简单 提供相同数据的不同显示 UNION ALL ...

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

    数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提 ...

  7. Oracle数据库基本操作(二) —— 视图、序列、索引、同义词

    一.视图(Views)与 同义词 1.视图:实际上是对查询结果集的封装,视图本身不存储任何数据,所有的数据都存放在原来的表中; 在逻辑上可以把视图看作是一张表 2.作用: 封装查询语句,简化复杂的查询 ...

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

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/Topyuluo/article/details/24232449 数据库的对象包含:表.视图.序列. ...

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

    一.视图 在之前所学习过的所有的SQL语法之中,查询操作是最麻烦的,如果程序开发人员将大量的精力都浪费在查询的编写上,则肯定影响代码的工作进度,所以 一个好的数据库设计人员,除了根据业务的操作设计出数 ...

随机推荐

  1. 如何选择分布式事务形态(TCC,SAGA,2PC,基于消息最终一致性等等)

    各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务 基于TCC实现的分布式事务 基于SAGA实现的分布式事务 基于2PC实现的分布式事务 这些形 ...

  2. openwrt-rpcd服务ACL配置错误风险分析

    前言 openwrt 是一个用于的 路由器 的开源系统. 其他类似的路由器系统相比它的更新速度非常的快,可以看看 github 的更新速度 https://github.com/openwrt/ope ...

  3. 【Python】Java程序员学习Python(六)— 流程控制、异常处理

    和Java语言一样,Python也有基本的流程控制,简单了解下即可. 一.流程控制的元素 条件 条件就是布尔值或者布尔值的表达式,要么是True要么是False. 代码块 在Python中,代码块不是 ...

  4. 基于 Docker 的现代软件供应链

    [编者按]本文作者为 Marc Holmes,主要介绍一项关于现代软件供应链的调查结果.本文系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 3 月初,为了了解软件供应链的现状以及 D ...

  5. Android组件系列----当前Activity跳转到另一个Activity的详细过程

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  6. leetCode题解之判断一个句子中的字符和数字是否构成回文

    1.问题描述 Given a string, determine if it is a palindrome, considering only alphanumeric characters and ...

  7. 北美Developer生存发展攻略

    http://www.followmedoit.com/bbs/forum.php?mod=viewthread&tid=49&extra=page%3D1 在北美,做PM不易,而做D ...

  8. Linux 环境部署记录(一) - 基础设定

    时间设置 查看系统当前日期/时间: date -R 查看系统硬件时钟: hwclock --show 设置硬件时间: hwclock --set --date="07/18/17 20:55 ...

  9. Stacks And Queues

    栈和队列 大型填坑现场,第一部分的还没写,以上. 栈和队列是很基础的数据结构,前者后进先出,后者先进先出,如下图: 下面开始将客户端和具体实现分开,这样有两个好处:一是客户端不知道实现的细节,但同时也 ...

  10. PHP设计模式系列 - 外观模式

    外观模式 通过在必需的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了调用对象的复杂性. 外观设计模式和建造者模式非常相似,建造者模式一般是简化对象的调用的复杂性,外观模式一般是简化含有很多逻 ...