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;