序列
① 可供多个用户用来产生唯一数值的数据库对象
② 自动提供唯一的数值
③ 共享对象
④ 主要用于提供主键值
⑤ 将序列值装入内存可以提高访问效率
一、CREATE SEQUENCE(创建序列)
二、查询序列
查询数据字典视图 USER_SEQUENCES 获取序列定义信息。
如果指定NOCACHE 选项,则列LAST_NUMBER显示序列中下一个有效的值。
SELECT sequence_name,min_value,max_value,increment_by,last_number
FROM user_sequences;
三、NEXTVAL 和 CURRVAL 伪列
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。
SELECT sequence.NEXTVAL
FROM dual;
CURRVAL 中存放序列的当前值。
SELECT sequence.CURRVAL
FROM dual;
NEXTVAL 应在 CURRVAL 之前指定,否则会报CURRVAL 尚未在此会话中定义的错误。
四、使用序列
- 将序列值装入内存可提高访问效率。
- 序列在下列情况下出现裂缝:
1)回滚
2)系统异常
3)多个表同时使用同一序列 - 如果不将序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值
举例:
INSERT INTO departments
(department_id,department_name,location_id)
VALUES (sequence.NEXTVAL,'Support',2500);
五、ALTER SEQUENCE(修改序列)
必须是序列的拥有者或对序列有ALTER权限。
只能修改序列的增量,最大值,最小值,是否循环,是否装入内存。
改变序列的初始值只能通过删除序列之后重建序列的方法实现。
ALTER SEQUENCE sequence
INCREMENT BY 20
MAXVALUE 999999
MINVALUE 100
NOCACHE
NOCYCLE;