Oracle 序列化sequence

一、什么是序列?

  是数据库对象一种。多个用户可以通过序列生成连续的数字以此来实现主键字段的自动、唯一增长,并且一个序列可为多列、多表同时使用。

二、序列语法: 

CREATE SEQUENCE 序列名
START WITH 1000 -- 从1000开始
INCREMENT BY 1 -- 每次加1个
MAXVALUE 20000 -- 设置最大值 (也可以设置无最大值NOMAXVALUE)
NOCYCLE -- 一直累加,不循环,达到最大值就停止
CACHE 10; --设置缓存10个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

具体说明:

INCREMENT BY:指定序列增长步长。可以为正(升序)、负整数(降序),但不能为0。最高精度28。
START WITH: 指定序列起始数。默认为序列最小值。
MAXVALUE :指定序列最大值。最大28位。必须大于等于起始值且大于等于序列最小值。
NOMAXVALUE:  无最大值(实际为10^27或-1)。default
MINVALUE :指定序列最小值。
NOMINVALUE  :无最小值(实际为1或-10^26)。Default
CYCLE  :指定序列达到最大值或最小值后继续从头开始生成。
NOCYCLE :不循环生成。Default.
CACHE :指定数据库内存中预分配的序列值个数,以便快速获取。最小cache值为2。
Cache参数最大值为:(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
注意1:如果系统发生故障,所有缓存的没有被DML语句使用并提交的序列值将丢失。潜在丢失值数量等于cache的数量。
NOCACHE  :不指定缓存数,默认缓存20
ORDER :指定order条件保证序列按请求顺序生成。此条件适用于RAC环境。
NOORDER :不保证序列按请求顺序生成。

三、获得sequence的值

   1)CurrVal:sequence的当前值 

SELECT 序列名称.currval FROM DUAL; 
   2)NextVal:sequence的下一个值 

SELECT 序列名称.nextval FROM DUAL; 

在Sql语句中可以使用sequence的地方: 
    - 不包含子查询、snapshot、VIEW的 SELECT 语句 
    - INSERT语句的子查询中 
    - INSERT语句的values中 
    - UPDATE 的 SET中

如在插入语句中:

insert into table表名(id,name) values(seqtest.nextval,'haa');
注意: 如果创建表直接添加数据不是从1开始,而是从2开始!; 如果表中有数据就会从1开始!??


四、修改序列

  拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以修改但除start with以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再重新创建。

alter sequence 序列名
increment by 10
maxvalue 100000;

此时修改的maxvalue必须大于序列当前值。

五、删除序列

 删除序列必须要有drop  any  sequence权限!

drop sequence 序列名












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值