Oracle 是通过序列来处理自增长的列
1.建立序列 (sequence)
例:创建一个序列i_id_seq第一个序列号为50,增量为1,最大值为100
create sequence i_id_seq
start with 50 increment by 1 maxvalue 100 cache 10
/*注:cache用于指定在内存中可以预分配的序列号个数<该选项设置越大序列的访问性能会越好同时也会占用更多的内存空间>
cache 10 表示一次产生10个号,
但是使用缓存产生号,优点是提高效率,缺点是可能产生跳号
例如 第一次插入5条数据那么就只使用了五个序列号 但是产生了十个序列号还有五个就废弃了
接着再插入数据时就会重新调用i_id_seq再次产生10个序列号 这样就会产生跳号
*/
2.使用序列
当使用序列时,必须通过伪列 nextval和currval来引用序列(引用方法:序列名.伪列)
nextval用于返回下一个序列值 currval用于返回当前序列值
例:
insert into i_top(id,name,i_topps)
values(i_id_seq.nextval,'tomms','fkf');
3.维护序列
修改序列:<序列的初始值不能修改>
例:修改序列i_id_seq的最大值为200 缓存值为20
alter sequence i_id_seq maxvalue 200 cache 20;
/*
注:sequence 用于指定序列号
increment by 用于改变序列增量
maxvalue 用于改变序列生成器可以生成的最大序列号
minvalue 用于改变序列生成器可以生成的最小序列号
cycle|nocycle用于改变序列的循环选项
cache|nocache 用于改变序列的缓存设置
*/
删除序列
例:删除序列i_id_seq
drop sequence i_id_seq
4.显示序列信息<数据字典 user_sequences>
select
us.INCREMENT_BY ,--标识序列增量
us.CACHE_SIZE, --标识cache选项值
us.MAX_VALUE, -- 最大值
us.MIN_VALUE, --最小值
us.LAST_NUMBER --标识序列生成器在内存中要生成的下一个值
from user_sequences us
where sequence_name ='i_id_seq' --指定序列的名称
1.建立序列 (sequence)
例:创建一个序列i_id_seq第一个序列号为50,增量为1,最大值为100
create sequence i_id_seq
start with 50 increment by 1 maxvalue 100 cache 10
/*注:cache用于指定在内存中可以预分配的序列号个数<该选项设置越大序列的访问性能会越好同时也会占用更多的内存空间>
cache 10 表示一次产生10个号,
但是使用缓存产生号,优点是提高效率,缺点是可能产生跳号
例如 第一次插入5条数据那么就只使用了五个序列号 但是产生了十个序列号还有五个就废弃了
接着再插入数据时就会重新调用i_id_seq再次产生10个序列号 这样就会产生跳号
*/
2.使用序列
当使用序列时,必须通过伪列 nextval和currval来引用序列(引用方法:序列名.伪列)
nextval用于返回下一个序列值 currval用于返回当前序列值
例:
insert into i_top(id,name,i_topps)
values(i_id_seq.nextval,'tomms','fkf');
3.维护序列
修改序列:<序列的初始值不能修改>
例:修改序列i_id_seq的最大值为200 缓存值为20
alter sequence i_id_seq maxvalue 200 cache 20;
/*
注:sequence 用于指定序列号
increment by 用于改变序列增量
maxvalue 用于改变序列生成器可以生成的最大序列号
minvalue 用于改变序列生成器可以生成的最小序列号
cycle|nocycle用于改变序列的循环选项
cache|nocache 用于改变序列的缓存设置
*/
删除序列
例:删除序列i_id_seq
drop sequence i_id_seq
4.显示序列信息<数据字典 user_sequences>
select
us.INCREMENT_BY ,--标识序列增量
us.CACHE_SIZE, --标识cache选项值
us.MAX_VALUE, -- 最大值
us.MIN_VALUE, --最小值
us.LAST_NUMBER --标识序列生成器在内存中要生成的下一个值
from user_sequences us
where sequence_name ='i_id_seq' --指定序列的名称