序列

  在许多的数据库之中都支持一种列类型 – 自动增长列。实际上各个数据库都会提供自动的操作,但是只有Oracle数据库提供的是手工的操作,而这个手工的操作对象就是序列。序列本身依然属于 oracle 的对象,所以想要定义序列,依然需要 DDL 的操作持,序列的创建语法如下:

CREATE SEQUENCE 序列名称
[INCREMENT BY 步长] [START WITH 开始值]
[MAXVALUE 最大值 | NOMMAXVALUE] [MINVALUE 最小值 | NOMINVALUE]
[CYCLE | NOCYCLE] [CACHE 缓冲个数 | NOCACHE];

范例:创建一个序列

DROP SEQUENCE myseq;
CREATE SEQUENCE myseq;

  当一个序列创建成功以后,如果想要操作这个序列,那么可以通过两个伪列进行:
  · 序列.nextval:取得下一个序列的增长结果,每调用一次此操作,序列值增加;
  · 序列.currval:取得当前的序列内容。
  
  当一个序列创建完成以后,实际上是无法立刻使用的,即:是没有当前内容的,所以如果现在世界使用 currval ,那么一定不会有任何的结果返回,必须在执行了 nextval 之后,序列才可以真正的被创建并使用。
范例:每调用一次 nextval 那么序列内容都会增长

SELECT myseq.nextval FROM dual;

范例:每一次调用 currval 都会取得当前的内容,序列不会改变

SELECT myseq.currval FROM dual;

这里写图片描述

  如果想要查询序列的信息,肯定使用的是 user_sequences 数据字典,所以下面需要观察一下这个数据字典的组成。
这里写图片描述

  • SEQUENCE_NAME(序列名称):现在只有一个 myseq 的序列,对象名称就是 myseq;
  • MIN_VALUE(最小值):在默认情况下序列是从1开始的,所以最小值就是1;
  • MAX_VALUE(最大值):表示序列增长的最大内容;
  • INCREMENT BY(步长):默认情况下,每一次增长的步长为1;
  • C(CYCLE,循环标记):是否是一个循环的序列,默认是 “N”;
  • O(ORFER,排序):在多个数据库共享同一个序列时的排序要求;
  • CACHE_SIZE(缓冲大小):表示缓冲20;
  • LAST_NUMBER(最后的数据):缓冲后的结果。

      每当用户每一次取得序列值的时候实际上都是贝缓冲后的结果,如果现在数据库出现了问题,或者实例停止掉,那么可能所有被缓冲的数据就会消失了,就会产生跳号。
      清楚了序列的基本的操作之后,那么下面就必须去在表上应用序列,刚才一直强调,序列是一种手工的处理方式,所以在建立数据表的时候与之前是没有任何区别的,关键在于增加数据上。

范例:建立一张表

DROP TABLE mytab PURGE;
CREATE TABLE mytab( 
    id  NUMBER CONSTRAINT pk_id PRIMARY KEY ,
    name    VARCHAR2(10)
);

范例:手工设置数据

INSERT INTO mytab(id,name) VALUES (myseq.nextval,'MARI');

这里写图片描述
  使用序列,主要的目的是可以生成一种流水号。
  但是在序列的创建语法之中,毕竟还有许多其他的选项,下面分别来看各个选项的作用:

1、设置步长:INCREMENT BY 步长
  默认情况下每一次的增长内容是1,那么用户也可以自己进行修改。

DROP SEQUENCE myseq;
CREATE SEQUENCE myseq 
INCREMENT BY 5;

这里写图片描述

2、定义序列的开始值: START WITH 开始值
  默认的开始值是从1开始,那么也可以由用户自己指定开始数值,例如:做一个电子商务平台,它的开始值就可以大一些。

DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq 
INCREMENT BY 5 
START WITH 300000 ;

这里写图片描述

3、定义循环序列:现在希望序列内容可以在 1、3、5、7、9 之间循环出现

  • 开始值(START WITH) 为 1 ;
  • 步长(INCREMENT BY) 为 2 ;
  • 最大值(MAXVALUE) 为 9 ;
  • 最小值(MINVALUE) 为 1 ;
  • 循环标记(CYCLE) ;
  • 缓冲设置(CACHE):设置的内容比 MAXVALUE 小,或者直接取消缓冲。
DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq 
INCREMENT BY 2 
START WITH 1 
MINVALUE 1 MAXVALUE 9 
CYCLE NOCACHE ;

这里写图片描述
  如果是在开发之中,对于序列最常用的情况不是上面这些特殊序列操作形式,往往都是一个顺序的流水编号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值