SEQUENCE

SEQUENCE

序列:可供多个用户来产生唯一数值的数据库对象

  • 自动提供值
  • 共享对象
  • 主要用于提供主键值
  • 将序列装入内存可以提高访问效率

创建序列

create sequence 序列名

​ increment by n 每次增长 n

​ start with n 从 n 开始

​ maxvalue n | nomaxvalue 最大值

​ minvalue n | nominvalue 最小值

​ cycle | no cycle 是否要循环

​ cache n | no cache 是否缓存

create sequence seq_test
       start with 100
       increment by 5
       maxvalue 120
       cycle 
       cache 10

sequence的两个伪列,nextval,currval

  1. select seq_test.nextval from dual

    序列的下一个值

  2. select seq_test.currval from dual

    序列的当前值

注意:

  • 第一次调用nextval返回的是初始值,随后的nxetval会自增定义的increment的值。currval是返回当前sequence的值,在调用序列的currval时,在之前一定要有过nextval,否则出错。就是当新创建一个序列时不能一开始就调用currval,一定要先有第一次nextval后才可以。
  • 如果指定cache值,oracle就会在内存里放置一些sequence,这样存取的快些。cache里的取完了,oracle自动再取一组到cache。使用cache可能会跳号,如数据库突然不正常down掉,cache中的sequence就会丢失,所以在创建sequence时用no cache防止这种情况。

序列裂缝

序列在以下情况出现裂缝

  • 回滚 (当sql语句出错时也算)
  • 系统异常
  • 多个表同时使用同一个序列

例:seq_test.currval 为 100,increment by 10,而且执行sql:insert into test1 values(seq_test.nextval,’z’ )都会因为约束而报错,产生回滚。

执行sql次数seq_test.currval
1110
2120
3130

修改序列

不能修改序列的start with,其他的都可以

alter sequence 序列名

​ increment by x …..

删除序列

drop sequence 序列名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值