Oracle 原理:序列

 序列是生成唯一的连续序号的对象。有点像SQLServer里面的种子标识,可以用来实现自增。

CREATE SEQUENCE S_NO    --序列名
START WITH 1            --起始值
INCREMENT BY 1          --自增值
MAXVALUE  200           --最大值
MINVALUE 1              --最小值
NOCYCLE                 --超过最大值是否从头算起
CACHE 10;               --内存中预先分配的序列号

创建序列需要权限 CREATE SEQUENCE;

CACHE 10 :指的是预先分配的序列号。比如当用户要取序列 1 时,1~10就会一起生成好,这样下次取序列2时,就不用先进行计算了,直接取序列2就行。

CREATE SEQUENCE S_NO2    --序列名
START WITH 1            --起始值
INCREMENT BY 1 ;         --自增值

select * from user_sequences

查看自身用户创建的的序列信息可以用user_sequences ;  查看所有用户的序列信息可以用 dba_sequences

我们可以看见,各个值的默认值,当没有指明值的时候,MIN_VALUE默认是1,MAX_VALUE是10^28,不进行循环,CACHE_SIZE为20;

使用SEQUENCE 时, CURRVAL 获取当前序列;NEXTVAL 获取下一个序列;首次使用SEQUENCE时要使用NEXTVAL对序列进行初始化,否则会报错。

此时再查询序列 s_no 信息:

发现 LAST_NUMBER 变成了11,因为你的CACHE_SIZE设成了10

不断获取下一个序列,发现在此过程中,S_NO的LAST_NUMBER 一直是11.

当获取到11时,LAST_NUMBER才变到21。

利用序列实现SQLServer里边的种子字段的自增功能,只要insert into 的时候用 s_no.nextval 就行了;

例如,学号通常是由 入学年份和专业代码还有班级座位号组成的,班级座位号的自动生成就可以使用序列;

 

修改序列:除了START WITH 起始值不能修改,其他都可以被修改

ALTER SEQUENCE S_NO 
Maxvalue 1000 
Cycle  
INCREMENT BY -6;

可以用CREATE OR REPLECE 重建,或者设置 INCREMENT BY 为 负值,执行以下NEXTVAL也行。

 

   if 序列没被初始化

     LAST_NUMBER =  Nextval

   else 

     LAST_NUMBER =  下一个进行内存分配的序列号

 

删除序列:

DROP SEQUENCE [序列名]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值