大耳朵先生

oracles使用序列作为主键

在开发中由于之前的项目使用的是mysql数据库,数据表的主键使用的是mysql自增策略生成,现在需要替换数据库为oracle;但是orcle不支持主键自增策略,此次不得不寻求替代方案 --- oracle的序列

 

首先了解下序列是什么

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

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

 

序列的用法

创建序列:

1、 要有创建序列的权限 create sequence 或 create any sequence

2、 创建序列的语法

  CREATE SEQUENCE sequence //创建序列名称

  [INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

  [START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue

  [{MAXVALUE n | NOMAXVALUE}] //最大值

  [{MINVALUE n | NOMINVALUE}] //最小值

  [{CYCLE | NOCYCLE}] //循环/不循环

  [{CACHE n | NOCACHE}];//分配并存入到内存中 

NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

CURRVAL 中存放序列的当前值

NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

 

Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1

Cycle cache 2;

//先nextval 后 currval

Select seqEmp.nextval from dual;

Select seqEmp.currval from dual;

Cache<max-min/increment

 

//解释

{

Create 创建

Sequence 序列 seqEmop 序列名称

Increment by 步长

Stat with 1 开始值

Maxvalue 最大值

Minvalue 最小值

 

Cycle 循环 nocycle 不循环

Cache 缓存 Cache<maxvalue-minvalue/increment by//一般不采用缓存

Nextvalue 下一个

Currval 当前值

 

}

//实例应用

//实现id的自动递增

//第一步

create table cdpt(

id number(6),

name varchar2(30),

constraint pk_id primary key(id)

);

 

Create sequence seq_cdpt

Increment by 1

Start with 1

Maxvalue 999999

Minvalue 1

Nocycle

nocache

 

insert into cdpt values(seq_cdpt.nextval,’feffefe’);

commit;

select * from cdpt;

/使用序列

会产生裂缝

l 序列在下列情况下出现裂缝:

• 回滚

• 系统异常

>多个表同时使用同一序列

//修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存

alter SEQUENCE sequence //创建序列名称

[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

[START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue

[{MAXVALUE n | NOMAXVALUE}] //最大值

[{MINVALUE n | NOMINVALUE}] //最小值

[{CYCLE | NOCYCLE}] //循环/不循环

[{CACHE n | NOCACHE}];//分配并存入到内存中

修改序列的注意事项:

l 必须是序列的拥有者或对序列有 ALTER 权限

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

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

删除序列

l 使用DROP SEQUENCE 语句删除序列

l 删除之后,序列不能再次被引用

Alter sequence seqEmp maxvalue 5;

Select seqEmp.nextval from dual;
————————————————
版权声明:本文为CSDN博主「A点点圈圈A」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_38325967/article/details/90166053

posted on 2022-05-21 12:47  大耳朵先生  阅读(630)  评论(0编辑  收藏  举报

导航