SQL Server中数据库可以自增字段,但是Oracle中没有这个选项,实际应用中我们可以使用序列(Sequence)实现想要的功能。
创建Sequence语法如下:
CREATE SEQUENCE SEQUENCE_NAME
? START WITH 1 --从 1 开始
INCREMENT BY 1 --每次增加 1
NOMAXVALUE/MAXVALUE 9999 --最大值,或无最大值
NOMINVALUE/MINVALUE 1 --最小值,或无最小值
CYCLE/NOCYCLE --到达最大值之后,是否循环
CACHE/NOCACHE --指定预先在内存中存放的SEQUENCE,增加存取速度(如果数据库不正常DOWN掉,会跳号,可以用NOCACHE防止这种情况)
ORDER; --排序?
?
序列提供的方法:
NextVal:
NextVal是取序列的下一个值,一次NEXTVAL会增加一次sequence的值
CurrVal:
CurrVal是取序列的当前值
例如:
insert tablename(id) values(sequence_id.nextval); --sequence_id为序列名
注意:
第一次NEXTVAL返回初始值,之后的NEXTVAL会自动增加定义的INCREMENT BY值并返回增加后的值。
CURRVAL总是返回当前SEQUENCE值,在第一次NEXTVAL初始化后才可以使用CURRVAL,否则出错。