Advertisement

Oracle创建Sequence序列

阅读量:

202-01-19 Oracle学习之创建序列


一、Oracle版本

Oracle 11.2.0.1.0 - 64bit

Tool SQLPlus

二、序列是啥

通过学习, 认识到序列是Oracle 数据对象的一种, 是由有序增加或减少相同步长的一组序号构成, 其主要功能是用来生成数据表的主键或唯一键. 序列不在磁盘上占用存储空间, 是运行在内存中的对象.

创建语法:

CREATE SEQUENCE 序列名称

INCREMENT BY [NUM1]

START WITH [NUM2]

MAXVALUE [NUM3] | [NOMAXVALUE]

MINVALUE [NUM4] | [NOMINVALUE]

NOCYCLE | CYCLE

NOCACHE | CACHE [NUM5]

[ORDER];

三、关键字解释:

该参数指定步进值INcrement By NUM1:支持正向和逆向增量的数值类型,默认值为1;不允许设置为0(否则将无法生成有效的序列)。

当NUM1为正数是序列值越来越大,为负数时越来越小。

设置序列为初值:指定序列为起始数值(默认为1)

3. MAXVALUE [NUM3] | [NOMAXvalue]:表示序列可以生成的最大值NUM3。未设置最大值时,默认为NOMAXvalue;递增序 列的上限据说为10^27;递减序列的最大极限是-1。

4. MINVALUE [NUM4] | [NOMINVALUE ]:设定数值变量NUM4作为生成序列时的最小阈值。若未指定该数值,则系统默认赋值为NOMINVALUE;对于递增序列而言,默认起始数值设定为1。

第5点:NOCYCLE与[CYCLE]的区别在于它们是否在序列值达到最大时触发循环机制。当设置为NOCYCLE时,则表示系统不会进入循环模式。对于那些耗尽内存或存储空间的情况,建议在内存或存储空间接近限制时启用循环机制以避免溢出风险。建议在内存或存储空间接近限制时启用循环机制以避免溢出风险。要获取下一个循环起始位置,请访问user_sequences表中的last_number字段

6. NOCACHE | [CACHE] [NUM5]:设置序列是否启用缓存以及指定的缓存块尺寸,默认尺寸设定为20个单位长度。当连接被中断时会自动清除当前缓存(我的猜测)。

7. ORDER选项定义了序列是否按顺序生成,默认设置为否。对于单实例数据库没有影响,因为序列始终是有序生成的。在分布式环境下,假设缓存Cache设置为20,在实例1处理时会获取1-20号序列值并存储于内存;当实例2引用同一缓存时,则会获取后续的21-40号序列值。这样设计确保了每个实例都能获得独特的、有序的序列值。

四、创建示例:

CREATE SEQUENCE S2

INCREMENT BY 2 --步进 2

START WITH 1 --起始值 1

MAXVALUE 20 --最大值 20

MINVALUE -20 --最小值 -20

NOCYCLE --不循环

NOCACHE; --不进行缓存

五、

1. 获取当前序列的值:

select s2.currval from dual;

2. 获取下一个序列的值:

select s2.nextval from dual;

3. 查询用户下有哪些序列:

select * from user_sequences;

六、序列创建后可以进行修改:

1. alter sequence s2 increment by -2; --修改为递减序列

2. alter sequence s2 maxvalue 100; --修改最大值为100

3. 设置序列s2的缓存参数为:s2\_cache\_size = 30; --注释:该操作表示一次缓存最多可容纳s2\$变量至内存空间中。

七、知识点总结:

1. 序列是共享的调用,有引用权限的用户都可以引用它。

2. 当事务回滚时,事务中增删改的数据可以回退,但序列不会回退!!!

在一个表中,在线递增字段值可能会断开或出现不连续的情况,并非所有情况都是由其他对象直接引用导致的;有时可能是dual虚拟表或其他机制造成的。

4. 当采用NO CACHE设置时,在每次引用序列都需要进行计算的情况下会消耗性能;而启用 CACHE 机制后,则只需在缓存命中时进行一次计算即可;若希望加快序列生成速度,请考虑增大 CACHE 值;常见应用场景之一是订单号等数值型标识符的处理。

5. 如果想用序列值作为主键,序列一定要定义为NOCYCLE。

全部评论 (0)

还没有任何评论哟~