什么是序列?
序列: 可供多个用户用来产生唯一数值的数据库对象
自动提供唯一的数值
共享对象
主要用于提供主键值
将序列值装入内存可以提高访问效率
CREATE SEQUENCE 语句
CREATESEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
创建序列
创建序列 DEPT_DEPTID_SEQ为表DEPARTMENTS 提供主键
不使用 CYCLE 选项
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
查询序列
查询数据字典视图user_sequences获取序列定义信息
Select sequence_name,min_value,max_value,increment_by,last_number
From user_sequences;
如果指定nocache选项,则列last_number显示序列中下一个有效的值
Nextval 和currval伪列
Nextval返回序列中下一个有效地值,任何用户都可以引用
Currval中存放序列的当前值
Nextval应在currval之前指定,二者应同时有效
序列应用举例
Insert into departments(department_id,department_name,location_id)
Values(dept_deptid_seq.nextval,’Support’,2500);
序列dept_deptid_seq的当前值
Select dept_dept_seq.currval from dual;
使用序列
将序列值装入内存可提高访问效率
序列在下列情况下出现裂缝:
回滚
系统异常
多个表同时使用同一序列
如果不将序列的值装入内存(NOCACHE), 可使用表USER_SEQUENCES 查看序列当前的有效值
修改序列
修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
Alter sequence dept_deptid_seq
Incrementby 20
Maxvalue 999999
Nocache
Nocycle;
修改序列的注意事项
必须是序列的拥有者或对序列有 ALTER 权限
只有将来的序列值会被改变
改变序列的初始值只能通过删除序列之后重建序列的方法实现
删除序列
使用DROP SEQUENCE 语句删除序列
删除之后,序列不能再次被引用
Drop sequence dept_deptid_seq;