Oracle序列sequence

  序列就是一组数字的队列。序列具有以下特征:

  • 自动生成唯一编号;
  • 是一个可共享的对象;
  • 通常用于创建主键;
  • 可替换应用程序中自增之类的相关代码;
  • 如果将序列高速缓存放到内存中,则可以提高序列值访问效率,但是也增大了危险。一旦内存失效,那么序列缓存值就丢失了。

   Oracle序列和MySql序列不一样。MySql序列可以在建表定义时一起定义,并且有插入自增的功能。但Oracle不行,Oracle序列必须以单独的数据对象出现。

创建序列

create sequence STU_ID_SEQ
 increment by 20     -- 步进为20,默认值为1
 start with 100      -- 起始值100,起始值并不意味着是最小值minvalue
 maxvalue 1000       -- 最大值1000
 minvalue 1
 nocache             -- 无缓存
 nocycle;            -- 无循环

NEXTVAL和CURRVAL

  NEXTVAL会返回下一个可用的序列值,每次被引用时都返回一个唯一的值。

  CURRVAL会返回当前序列值。

select STU_ID_SEQ.nextval from dual;
select STU_ID_SEQ.currval from dual;

使用序列

  主键使用序列:

-- 创建students表
create table students
( 
  id    number(6)     constraint PK_STU_ID primary key, 
  name  varchar2(30)  not null,
  sex   varchar2(3)    check(sex in ('F', 'M', 'F2M')),
  birth char(10)      
);

-- 插入数据
insert into students values(STU_ID_SEQ.nextval, '小红', 'F', '2022-01-01');
insert into students values(STU_ID_SEQ.nextval, '小强', 'M', '2022-03-01');

  当将序列使用在表中时,如果想查询当前序号值,尽量不要使用“select STU_ID_SEQ.nextval from dual;”语句来查看,因为nextval会影响表后续的序号值。如果想查看,应该使用currval。

修改序列

alter sequence STU_ID_SEQ
 increment by 1
 start with 1
 maxvalue 200
 nocache
 nocycle;
 

  序列修改准则:

  • 必须是序列的所有者才可以对序列实现ALTER权限;
  • 修改只会影响之后的序列号;
  • 如果从不同的序号处重新开始,则必须删除原有的序列后才可以重新创建。
  • 系统会执行一些验证操作。

删除序列

drop sequence STU_ID_SEQ;

查看序列

-- 查看当前用户下的所有序列
select * from user_sequences;

-- 查看所有用户下的序列
select * from all_sequences;

-- 需要权限
select * from dba_sequences;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值