oracle 序列Sequence 介绍

1 序列定义

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

2 语法

create sequence 序列名称
[start with 初始量]
[increment by 递增量|递减量]
[maxvalue 最大值| nomaxvalue]
[minvalue 最小值| nominvalue]
[cycle | nocycle]
[cache 缓存个数| nocache];

2.1 start with:生成第一个序列号,对于升序列,其默认值为序列最小值;对于降序序列,其默认值为序列的最大值(升序列默认为1 )

2.2 increment by:用于指定序列号之间的间隔,其默认值为1,如果integer为正值,则生成的序列按升序排列,如果integer为负值,则生成的序列将按降序排列。

2.3 maxvalue:序列可以生成的最大值。
2.4 nomaxvalue:oracle将升序序列的最大值设为10的27方,将降序序列的最大值设为-1.这是默认选项。(也就是没有设置最大值)
2.5 minvalue:minvalue必须小于或等于start with的值,并且必须小于maxvalue的值。
2.6 nominvalue:oracle将升序的最小值设为1,或将降序序列的最小值设为-10的26方.这是默认值。(代表没有最小值定义)

2.7 cycle:序列在达到最大值或最小值后,将继续从头开始生成值。cycle代表循环, nocycle代表不循环
2.8 nocycle:序列在达到最大值或最小值后,将不能再继续生成值。不写默认为nocycle这是默认选项 。达到限制值后,继续产生新值就会发生错误。
2.9 cache:预先分配一组序列号,并将其保留在内存中,这样可以更快地访问序列号.当用完缓存中的所有序列号.oracle将生成另一组数值,并将其保留在缓存中。
2.10 nocache:不会加快访问速度而预先分配序列号,如果在创建序列时忽略了cache和nocache,orcale将默认缓存20个序列号。

2.11 nextval 返回序列中下一个有效的值,任何用户都可以引用。

2.12 currval中存放序列的当前值,nextval 应在 currval之前指定 ,二者应同时有效。

2.13 Order 保证序列号按请求顺序产生。如果想以序列号作为timestamp(时间戳)类型的话,可以采用该选项。对于将序列用于生成主键来说,约定顺序通常并不重要。

2.14 NoOrder 此选项跟Order相对应,并不按照请求的顺序进行生成。

无论使用哪个选项,sequence中生成的数据都是唯一的。因此,我们可以得出结论,在用sequence中的数据作为ID时,无论选择哪个选项都能确保ID的唯一性。但如果,用sequence中的数据作为时间戳时,则需要使用Order选项,确保先到的请求时钟排序在前面。

序列的使用

1 创建表格

CREATE TABLE test_2 (
id NUMBER(11) NOT NULL ,
username VARCHAR2(255 ) NULL ,
age NUMBER(11) NULL ,
password VARCHAR2(255) NULL ,
PRIMARY KEY (id)
)

2 创建序列

create sequence test_sequence
minvalue 1 //最小值
maxvalue 999999999999999999999999999 //最大值
start with 1 //第一个序列号
increment by 1// 间隔数
cache 20;//分配一组序列号

3 使用序列

insert into test_2 (id, username, age, password) values (test_sequence.nextval, '杨杨杨', 20, '杨12')

 5 查询序列

5.1查询数据库所有序列

select sequence_name, min_value, max_value, increment_by, last_number from user_sequences;

5.2查询单个序列的下一个值

select test_sequence.nextval from dual;

6 删除序列

drop sequence 序列名;

7 修改序列

7.1 修改序列的注意事项:

 必须是序列的拥有者或对序列有 ALTER any sequence权限

 只有将来的序列值会被改变

  改变序列的初始值只能通过删除序列之后重建序列的方法实现

7.2 修改语句

alter sequence test_sequence
minvalue 1
maxvalue 999
-- start with 49 对于已经启动的序列,无法设置初始值
increment by 1
cache 20;
 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值