1、 序列
/*序列(sequence)是一种数据库项,它生成一个整数序列.序列所生成的整数通常可以用来填充数字类型的主键值。*/
--创建序列
/*CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[ { MAXVALUE maximum_num | NOMAXVALUE } ]
[ { MINVALUE mininum_num | NOMINVALUE } ]
[ { CYCLE | NOCYCLE }]
[ { CACHE cache_num | NOCACHE}]
[ { ORDER | NOORDER }]
*/
--省略可选参数,意味着起始数字和增量都被设置为默认值。
CREATE SEQUENCE test_seq;
--指定了可选参数
CREATE SEQUENCE test_seq1
START WITH 10
INCREMENT BY 5
MINVALUE 10
MAXVALUE 20
CYCLE
CACHE 2
ORDER;
--获取有关序列信息
select * from user_sequences where sequence_name='test_seq1'
--使用序列
/*序列生成一系列数字。一个序列中包含两个"伪列",分别是currval和nextval,可以分别用来获取该序列的当前值和下一个值;
在检索序列的当前值之前,必须通过检索序列的下一个值对序列进行初始化。*/
select test_seq1.nextval from dual;
select test_seq1.currval from dual;
--使用序列填充主键
create table t_order_status2(
id INTEGER constraint fk_order_status2_id primary key,
status varchar2(10),
last_modified date default sysdate
);
--创建序列
/*在使用序列填充主键时,通常应该使用nocache选项,这样可以避免序列产生不连续的情况。序列不连接的情况这所以会发生,是因为在关闭数据库时,所
缓存的值全部丢失了.
*/
create sequence order_status2_seq nocache;
insert into t_order_status2 (id,status,last_modified) values(order_status2_seq,'PLACED',sysdate);
--修改序列
alter sequence order_status2_seq
increment by 2;
--删除序列
drop sequence order_status2_seq;