Oracle数据库之序列(sequence)

序列是一个计数器,它并不会与特定的表关联。我们可以通过创建Oracle序列和触发器实现表的主键自增。序列的用途一般用来填充主键和计数。

一、创建序列

语法结构:

CREATE SEQUENCE [ schema. ] sequence_name
[ { INCREMENT BY | START WITH } integer
| { MAXVALUE integer | NOMAXVALUE }
| { MINVALUE integer | NOMINVALUE }
| { CYCLE | NOCYCLE }
| { CACHE integer | NOCACHE }
| ...
]...
;

完整语法结构见:http://docs.oracle.com/database/121/SQLRF/statements_6017.htm#SQLRF01314

说明:

  1. schema:模式,即用户名称
  2. sequence_name:序列名称
  3. INCREMENT BY:定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
  4. START WITH:定义序列的初始值,默认为1。
  5. MAXVALUE:序列生成器能产生的最大值。NOMAXVALUE是默认选项,代表没有最大值定义。
  6. MINVALUE:序列生成器能产生的最小值。NOMINVALUE是默认选项,代表没有最小值定义。
  7. CYCLE和NOCYCLE:当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值,最小值为1。对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
  8. CACHE:定义存放序列的内存块的大小,默认为20,相当于预加载。缓冲部分序列计数以便更快获取序列值,可以改善序列的性能,但缓存选项可能会造成数据丢失。NOCACHE表示不缓冲。

示例:

CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;

二、删除序列

语法:

DROP SEQUENCE [ schema. ] sequence_name ;

示例:

DROP SEQUENCE customers_seq;

三、使用序列

序列有两个属性能够获取序列的值:

CURRVAL:返回序列的当前值。

NEXTVAL:返回序列下一个值。

示例:.

INSERT INTO customers(id) VALUES (customers_seq.NEXTVAL);
SELECT customers_seq.CURRVAL FROM dual;

四、修改序列

语法:

ALTER SEQUENCE [ schema. ] sequence_name
{ INCREMENT BY integer
| { MAXVALUE integer | NOMAXVALUE }
| { MINVALUE integer | NOMINVALUE }
| { CYCLE | NOCYCLE }
| { CACHE integer | NOCACHE }
| ...
} ...
;

完整语法结构见:http://docs.oracle.com/database/121/SQLRF/statements_2014.htm#SQLRF00817

注意,不能修改序列的初始值,否则会报ORA-02283。如果需要修改初始值,先删除序列再重新创建序列设定初始值。

示例:

ALTER SEQUENCE customers_seq
MAXVALUE 1500;
ALTER SEQUENCE customers_seq
CYCLE
CACHE 5;

五、序列查看

SELECT * FROM USER_SEQUENCES;

SELECT * FROM ALL_SEQUENCES;

SELECT * FROM DBA_SEQUENCES;

Oracle数据库之序列的更多相关文章

  1. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  2. Oracle数据库游标,序列,存储过程,存储函数,触发器

    游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...

  3. Oracle数据库中序列用法讲解

    序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一 ...

  4. Oracle数据库,序列、索引、视图

    一.序列:生成自动增长(或减少)的整数值 Sequences中新建 调取: th_test.nextval 获取下一个值 th_test. currval获取当前值 二.视图:在物理表的基础上定义的虚 ...

  5. Oracle 数据库中序列结合触发器实现主键自增长

    一.数据表名称为T_OFFICE,其主键为PID(number类型) 二.首先为数据表的PID字段创建序列 序列名称:S_T_OFFICE_PID 序列详细内容: 三.创建相应的触发器 触发器名称:T ...

  6. Oracle数据库之四

    删除记录的SQL语句 delete from 表名[where 条件];(DML) 注意: 如果没有where子句,代表全部删除(慎用). delete也必须commit后才能生效 truncate也 ...

  7. Oracle数据库学习 视图、序列及存储过程

    视图(View) 视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示. 视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字. 视图本身不包含任何数据,它只是包含映射到基表的一个查 ...

  8. oracle 数据库中的序列

    序列是什么,通俗点说,序列就是按照一定顺序进行排列,序列会自动给你递增,生成唯一的序列号: oracle数据库不同于sqlServer数据库,oracle数据库中是没有自增长列,使用的是sequenc ...

  9. oracle数据库--序列(sequence)

    一个问题: 在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动的增长,怎么处理? 解决方式:oracle是利用"序列"(sequence)来完成的. ...

随机推荐

  1. SQL Server T-SQL高级查询1

    高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student;   --all 查询所有 select all sex from ...

  2. Web分析日志分析2

    http://www.docin.com/p-649515490.html http://wenku.baidu.com/link?url=kB-83fbl1Zc3Y6U2BYLj-lKMWShe8Z ...

  3. Microsoft Detours 2.1简介

    http://blog.163.com/qcb_163/blog/static/9545466420117851038971/ Microsoft Detours 2.1简介 2011-08-0817 ...

  4. Android URI简介

    就Android平台而言,URI主要分三个部分:scheme, authority and path.其中authority又分为host和port.格式如下:scheme://host:port/p ...

  5. Extjs4 中在指定光标处插入值

    var rulearea = Ext.getCmp(文本域Id); var rulevalue = rulearea.getValue();// 获取文本textarea 里面的值 var start ...

  6. SDUT2087 离散事件模拟-银行管理(模拟)

    题目链接. 分析: 模拟. 果然模拟什么的最讨厌了. 用e1,e2分别记录队列1,队列2的结束时间. 每个结点的s记录开始时间,e一开是记录逗留时间,进队列的时候,改成离开的时间.时刻记录总时间就可以 ...

  7. Makefile中的wildcard和patsubst

    makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束.    例如,在 GNU Make 里有一个叫 'wild ...

  8. TCP协议下Socket的基础编程类型

    套接字的基本操作有: 创建(socket).命名(bind).侦听(listen).连接(accept).关闭(shutdown).发送(send).接受(recv). 下面逐个分析: 一.创建(so ...

  9. Java学习日记-2.2 增强后的switch-case

    switch-case语句的基本格式 switch(expression){ case condition1: ... break; case condition2: ... break; case ...

  10. 一不小心写了个bootstrap风格下拉控件 JqueryUI + bootstrap

    受够了EasyUI的封闭,Bootstrap虽然华丽但是功能太渣,闲着无聊写个下拉控件玩玩吧,不喜勿喷哈... 第一步:先设计下我的下拉控件的样子 1.既然是bootstrap风格的,我想应该是这样的 ...