阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle的序列(sequence)

109次阅读
没有评论

共计 2114 个字符,预计需要花费 6 分钟才能阅读完成。

序列是用来生成唯一,连续的整数的数据库对象。序列通常用来自动生成主键或唯一键的值。序列可以按升序排列,也可以按降序排列。

创建序列语法:

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

start with:生成第一个序列号, 对于升序列, 其默认值为序列最小值; 对于降序序列, 其默认值为序列的最大值。
increment by:用于指定序列号之间的间隔, 其默认值为 1, 如果 integer 为正值, 则生成的序列按升序排列, 如果 integer 为负值, 则生成的序列将按降序排列。
maxvalue:序列可以生成的最大值。
nomaxvalue:Oracle 将升序序列的最大值设为 1027, 将降序序列的最大值设为 -1. 这是默认选项。
minvalue:minvalue 必须小于或等于 start with 的值, 并且必须小于 maxvalue 的值。
nominvalue:oracle 将升序的最小值设为 1, 或将降序序列的最小值设为 -1026. 这是默认值。
cycle:序列在达到最大值或最小值后, 将继续从头开始生成值。
nocycle:序列在达到最大值或最小值后, 将不能再继续生成值。不写默认为 nocycle 这是默认选项。
cache:预先分配一组序列号, 并将其保留在内存中, 这样可以更快地访问序列号. 当用完缓存中的所有序列号.oracle 将生成另一组数值, 并将其保留在缓存中。
nocache:不会加快访问速度而预先分配序列号, 如果在创建序列时忽略了 cache 和 nocache,orcale 将默认缓存 20 个序列号。

创建序列

create sequence seq_tb_person
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;

创建序列:从 1 开始,每次增加 1,最大值不受限制,不循环,缓存 10 个序列号。

 create sequence Users_SEQ

  increment by 1

  start with 1

  minvalue 1 nomaxvalue

  NOCYCLE  —在达到最大值后停止生成下一个值

  cache 10;

序列的使用:

创建序列号:

create sequence grade_Id

创建表:
create table grade
(
gid number primary key not null,
score number not null
) tablespace roottablespace

利用序列号向表中添加数据:
insert into grade(gid,score) values(grade_Id.Nextval,95)

insert into grade(gid,score) values(grade_Id.Nextval,90)
查询数据

select *from grade

Oracle 的序列(sequence)

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

修改序列

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

删除序列

drop sequence 序列名;
select grade_Id.NEXTVAL from dual   -- 第一次使用 NEXTVAL 时,返回该序列的初始值。以后在引用 NEXTVAL 时,将返回新增。
select grade_Id.CURRVAL  from dual  -- 返回序列的当前值,即最后一次引用 NEXTVAL 时返回的值。

注意事项:
  • 一个序列可以被多张别使用,不过一般建议为每个表建立单独的序列。
  • 当使用到序列的事务发生回滚。会造成序列号不连续。在用生成的序列值作为编号做插入数据库操作时,可能遇到事务提交失败,从而导致序号不连续。
  • 大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle 序列允许将序列提前生成 n 个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但 cache 个数最好不要设置过大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最大的序列号 +1 开始存入 n 个。这种情况也能会在数据库关闭时也会导致序号不连续。

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149631.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2114字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中