oracle序列概念,如何创建,修改和使用序列?

oracle序列概念,如何创建,修改和使用序列?

众所周知,MySQL可以通过设置主键自增长实现ID的递增,但是Oracle数据库中并没有自增字段,它是如何实现id自增长的呢?

实际上Oracle使用了序列这个东西来实现ID“自增长”,什么是序列呢?

序列(SEQUENCE):是***生成器,可以为表中的行自动生成***,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。

其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

创建序列

create sequence seq_tenant_system;

注意:此时数据库id需要使用number类型,如果id不是number,使用下面的语句修改:

alter table tbl_tenant_system modify id number not null;

使用序列

调用nextval将生成序列中的下一个***,调用时要指出序列名,即用以下方式调用:

序列名.nextval,如:seq_tenant_system.nextval

currval用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没有通过调用nextval产生过序列的下一个值,先引用currval没有意义。调用currval的方法同上,要指出序列名,即用以下方式调用:

序列名.currval,如:seq_tenant_system.currval

修改序列

alter sequence seq_tenant_system increment by 10 max value 1000 cycle     -- 到1000后从头开始 nocache ;

修改序列的注意事项:

1  必须是序列的拥有者或对序列有 ALTER any sequence权限

2  只有将来的序列值会被改变

3  改变序列的初始值只能通过删除序列之后重建序列的方法实现

删除序列

drop sequence seq_tenant_system;