Oracle主键自增
一、创建Sequence语法
create sequence seq_name
[start with n]
[minvalue n | nomainvalue]
[maxvalue n | nomaxvalue]
[cache n | nocache]
[cycle | nocycle]
[order | noorder]
minValue: 指定序列最⼩值。
maxValue: 指定序列最⼤值。
increment by: 指定序列增长步长,可以为正(升序)、负整数(降序),但不能为0。
start with:指定序列起始数,默认为序列最⼩值。
nomaxValue:⽆最⼤值(实际为10^27或-1),默认。
nominValue:⽆最⼩值(实际为1或-10^26),默认。
cycle:指定序列达到最⼤值或最⼩值后继续从头开始⽣成。
nocycle:不循环⽣成,默认。
cache:指定数据库内存中预分配的序列值个数,以便快速获取,最⼩cache值为2。如果系统关闭或者其它情况将会导致序列不连续,也可以设置为nocache。
nocache:不指定缓存数,默认缓存20。
order:指定order条件保证序列按请求顺序⽣成。
noorder:不保证序列按请求顺序⽣成。
create sequence USER_ID_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 21
increment by 1
cycle
cache 20;
二、Sequence使用
1、获取Sequence取值
select USER_ID_SEQ.nextval from dual; -- 查询序列下一个值;每次运行结果都不一样;且会使序列最后一个值更新;
select USER_ID_SEQ.currval from dual; -- 查询序列当前最后一个值;多次运行不会改变序列最后一个值;
2、创建触发器时指定
create or replace trigger t_user_tr
before insert on t_user
for each row
begin
select USER_ID_SEQ.nextval into :new.user_id from dual;
end t_user_tr;
3、Insert语句
insert into t_test values(seq_test.nextval, "zhangsan", 26)
三、修改sequence
alter sequence USER_ID_SEQ increment by 2; --指定步长
alter sequence USER_ID_SEQ maxValue 99999999999; --设置最大值
四、删除Sequence
drop sequence USER_ID_SEQ