Oracle sequence 序列
程序员文章站
2022-04-05 22:20:54
...
1.创建序列
实例:
2.更改序列命令
ALTERSEQUENCE [user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE];
修改序列可以:
修改未来序列值的增量。
设置或撤消最小值或最大值。
改变缓冲序列的数目。
指定序列号是否是有序。
3.删除序列命令
DROP SEQUENCE [user.]sequence_name;
用于从数据库中删除一序列。
4.SQL中取序列号的用法:
SELECT NCME_QUESTION_SEQ.nextval FROM dual --nextval 当前序列号的下一个值
SELECT NCME_QUESTION_SEQ.CURRVAL FROM dual --CURRVAL 当前序列号的值
5.使用目的
通常用于生成数据库数据记录的自增长主键或序号的地方
注意点:
oracle 序列 的order选项
order保证序列产生的顺序和请求的顺序是一致的,在并行模式下如果A、B同时对序列请求那么先产生的序列号必然返回给先请求的用户。例如当前序列号为10,A先请求B后请求那么11一定返回给A,12给B,在noorder的情况下,有可能11给B,12给A。
指定CACHE值
如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。
cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号,
比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失.
所以可以在create sequence的时候用nocache防止这种情况。
CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1 [START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue [{MAXVALUE n | NOMAXVALUE}] //最大值 NOMAXVALUE没有最大值 [{MINVALUE n | NOMINVALUE}] //最小值 NOMINVALUE没有最小值 [{CYCLE | NOCYCLE}] //循环/不循环 [{CACHE n | NOCACHE}]//分配并存入到内存中 [ORDER | NOORDER];//保证序列产生的顺序和请求的顺序是否一致
实例:
-- Create sequence create sequence S_XD_SHOP minvalue 1 maxvalue 999999999 start with 81 increment by 1 cache 20;
2.更改序列命令
ALTERSEQUENCE [user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE];
修改序列可以:
修改未来序列值的增量。
设置或撤消最小值或最大值。
改变缓冲序列的数目。
指定序列号是否是有序。
3.删除序列命令
DROP SEQUENCE [user.]sequence_name;
用于从数据库中删除一序列。
4.SQL中取序列号的用法:
SELECT NCME_QUESTION_SEQ.nextval FROM dual --nextval 当前序列号的下一个值
SELECT NCME_QUESTION_SEQ.CURRVAL FROM dual --CURRVAL 当前序列号的值
5.使用目的
通常用于生成数据库数据记录的自增长主键或序号的地方
注意点:
oracle 序列 的order选项
order保证序列产生的顺序和请求的顺序是一致的,在并行模式下如果A、B同时对序列请求那么先产生的序列号必然返回给先请求的用户。例如当前序列号为10,A先请求B后请求那么11一定返回给A,12给B,在noorder的情况下,有可能11给B,12给A。
指定CACHE值
如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。
cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号,
比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失.
所以可以在create sequence的时候用nocache防止这种情况。