1、创建序列
- 语法 CREATE SEQUENCE 序列名 [相关参数]
- 参数说明
INCREMENT BY :序列变化的步进,负值表示递减。(默认1)
START WITH:序列的初始值 。(默认1)
MAXvalue:序列可生成的最大值。(默认不限制最大值,NOMAXVALUE)
MINVALUE:序列可生成的最小值。(默认不限制最小值,NOMINVALUE)
CYCLE:用于定义当序列产生的值达到限制值后是否循环(NOCYCLE:不循环,CYCLE:循环)。
CACHE:表示缓存序列的个数,数据库异常终止可能会导致序列中断不连续的情况,默认值为20,如果不使用缓存可设置NOCACHE
- 举例子
CREATE SEQUENCE SEQ_DEMO
INCREMENT BY 1 -- 每次加1
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE --直累加,不循环
CACHE 50;
2、修改、删除序列
- 使用alter命令修改,例:
ALTER SEQUENCE SEQ_DEMO
INCREMENT BY 1
START WITH 1
MAXvalue 999
NOCYCLE
NOCACHE;
- 使用drop命令删除,例:
DROP SEQUENCE SEQ_DEMO;
注意:
1、如果想要改变start的值,必须 drop sequence 再重建一个序列
2、如果想要改变minvalue的值,必须删除序列化后再重新建立序列化。不可以修改序列化的minvalue。
3、序列的使用
- currval 表示序列的当前值,新序列必须使用一次nextval 才能获取到值,否则会报错
- nextval 表示序列的下一个值。新序列首次使用时获取的是该序列的初始值,从第二次使用时开始按照设置的步进递增
- 查询序列的值:select seq_name.[currval,nextval] from dual;
- SQL语句中使用:insert into table (id) values (seq_name.nextval)
- 如果想自动一些,对表的插入操作,建立一个触发器,每当有数据插入时,触发器自动修改id值为序列的新值,这样就完全实现自增id功能了,跟mysql的自增一样。