一、序列说明
ORACLE 没有自增数据类型,如需生成业务无关的主键列或惟一约束列,可以用 Sequence 序列实现
二、创建序列
ORACLE 没有自增数据类型,如需生成业务无关的主键列或惟一约束列,可以用 Sequence 序列实现
二、创建序列
CREATE SEQUENCE SEQ_NAME -- 序列名
MINVALUE 1 -- 定义序列的最小值,系统能产生的最大值为28个9。不设置时默认为 NOMINVALUE,此时递增序列最小值为1,递减为负10的26次方
MAXVALUE 10000 -- 定义序列的最大值,系统能产生的最大值为28个9。不设置时默认为 NOMAXVALUE,此时递增序列最大值为10的27次方,递减为负1
START WITH 1 -- 定义序列产生的第一个值。默认时,升序为最小值开始,降序为最大值开始
INCREMENT BY 1 -- 定义序列的步长。如果省略,则默认为1;如果出现负值,则代表为降序序列
NOCACHE -- 定义序列不预先缓存值到内存。可以用 CACHE SIZE 来定义缓存的大小,使用缓存在获取时能相对快一些但可能产生跳号
NOCYCLE -- 定义序列的值达到最大值后不循环。不循环用 NOCYCLE 表示,循环用 CYCLE 指定,默认 NOCYCLE
NOORDER ; -- 定义序列产生的序列号不需要保证按请求顺序产生,需要使用 ORDER 指定,不需要也可以不定义该参数
三、删除序列
DROP SEQUENCE 用户.序列名;
四、查看序列
SELECT
SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CYCLE_FLAG, ORDER_FLAG, CACHE_SIZE, LAST_NUMBER
FROM DBA_SEQUENCES;
五、查询获取 -- 查询序列的当前的值
SELECT SEQ_NAME.CURRVAL FROM DUAL; -- SEQUENCE创建后需要先NEXTVAL后才能执行CURRVAL
-- 获取序列的下一个值
SELECT SEQ_NAME.NEXTVAL FROM DUAL; -- SEQUENCE会先执行一次步长,然后返回步长后的值
六、修改序列
-- 1. 查看当前的序列值
SELECT SEQ_TEST_1.CURRVAL FROM DUAL;
-- 2. 设置一个新的步长
ALTER SEQUENCE SEQ_TEST_1 INCREMENT BY 100;
-- 3. 获取设置为新步长后的下一个序列值
SELECT SEQ_TEST_1.NEXTVAL FROM DUAL;
-- 4. 修改回旧的步长
ALTER SEQUENCE SEQ_TEST_1 INCREMENT BY 1;
-- 5. 使用旧的步长获取下一个序列值
SELECT SEQ_TEST_1.NEXTVAL FROM DUAL;