oracle主键自增长在项目中经常使用,下面将使用序列以及触发器来实现:
首先新建一个表info
create table info(
id number(8) primary key,
name varchar2(20),
pass varchar2(20)
);
再建一个序列ID_SEQ
create sequence ID_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 41
increment by 1
cache 20;
--
create sequence ID_SEQ
minvalue 1 --最小值
maxvalue --最大值
nomaxvalue --不设置最大值
start with 1 --从1开始计数
increment by 1 --每次加1个
nocycle --一直累加,不循环
nocache; --不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为ID_SEQ,范围是从1开始到999999999999999999999999999,nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!)
你只有了表和序列还不够,最好再建一个触发器来执行它!代码如下:
create or replace trigger info_trigger
before insert on info
for each row
begin
select id_seq.nextval into:new.id from dual;
end;
之后看看新增时主键自增长效果:
insert into info(name,pass) values('aaa','111');
insert into info values('55','bb','222');
--这一条记录插入id看看id取哪个值
insert into info(name,pass) values('ccc','333');
查看表数据为:
ID NAME PASS
1 41 aaa 111
2 42 bb 222
3 43 ccc 333
所以当设置主键自增长后id取值优先为序列值。