在Oracle中,序列(Sequence)常被用于实现自增主键。
创建一个序列
CREATE SEQUENCE sequence_name
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;
MAXVALUE
的默认值为
999999999999999999999999999。CACHE
可以是具体的数值指定特定个数的数列被缓存内存待使用,提高效率,但是宕机后这些序列值将不可用,新的序列将会是缓存的最大值+increment的值。指定NOCACHE
将不适用缓存。
引用序列值
sequence_name.nextval
序列的删除
DROP SEQUENCE sequence_name;
序列的修改
ALTER SEQUENCE sequence_name action;
action
支持创建序列时指定的选项,比如INCREMENT BY 10
会修改序列每次加10。
序列值作为主键的值插入数据库
CREATE SEQUENCE myseq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
create table nothing(id integer, name varchar2(256)));
insert into nothing values(myseq.nextval, 'nothing');
sqlldr中的序列生成方法
sqlldr
中具有方法
sequence(OPTION, INCREMENT)
函数可以为导入的数据自动填充序列值。
OPTION
可能的值为:
- 具体的数值,表示以此数值未开始
- max 表示使用已有数据的当前最大值为开始值
- count 表示使用已有的数据量为开始值
INCREMENT
为具体数值表示序列增幅。