序列

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. Android控件显示和隐藏

    Android控件都有visibility属性,该属性有三个可能值:visible.invisible.gone.可以通过预设或是Java程序控制这些控件的显示或隐藏. 一.在XML配置文件设置 可见 ...

  2. Week5——applet

    1.定义 applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序. 2.特点(不同于Java  a ...

  3. Java 8方法引用使用指南

    [编者按]本文作者为拥有15年 Java 开发经验的资深程序员 Per-Åke Minborg,主要介绍如何灵活地解析 Java 中的方法引用.文章系国内 ITOM 管理平台 OneAPM 编译呈现. ...

  4. npm、webpack、Gulp 中文教程

    按顺序阅读 1.npm 模块管理器 2.package.json 文件 3.npm 模块安装机制简介 4.npm scripts 使用指南 5.CommonJS 规范 随着 es6 模块化特性的出现, ...

  5. Fatal error: Can't use function return value in write context

    这个的出错原因很简单,先贴出错代码: <?php $contact = array("id"=>1, "姓名"=>"老高" ...

  6. Web程序中打开QQ、邮箱、阿里旺旺等

    在网页中使用链接打开QQ的聊天窗口有两种方式: uin的值为qq号 <a target="_blank" href="@Url.Content("tenc ...

  7. JAVA 判断字符长度

    /** * 判断姓名字符长度 * 字符串为空返回0:有中文返回中文字符数:无中文返回2 * @param CustomerSn * @return */ private Integer getName ...

  8. Spring常用注解简单汇总

    使用注解之前要开启自动扫描功能,其中base-package为需要扫描的包(含子包). <context:component-scan base-package="cn.test&qu ...

  9. Oracle EBS 附件功能

    SELECT fde.table_name, fde.data_object_code, fdet.user_entity_name, fdet.user_entity_prompt, fat.app ...

  10. mac 手动卸载软件位置

    系统偏爱设置 /Users/xxxxx/Library/Preferences/ xxxx 支持文件 /Users/xxxxx/Library/Application Support/xxx文件夹 数 ...