一、序列
(一)序列定义
序列是一种用于产生唯一数字列值得数据库对象,一般使用序列自动地生成主码键或唯一键值,序列可以是升序或降序。
(二)NEXTVAL和CURRVAL伪列
可用语句sequence_name.currval和sequence_name.nextval来访问序列
currval:获取当前序列值;
nextval:返回下一个有效地序列值;
currval和nextval都返回number值;
currval能被引用之前,必须使用nextval产生一个序列值;
二、序列特点
可以自动产生唯一数值;
可被多个用户共享;
典型应用是生成主键值,用于标识记录的唯一性,但不保证其值是连续的,可能是中间回滚了;
使用缓存加速序列的访问速度。
三、序列操作
(一)创建序列
--创建序列test_sequence
CREATE SEQUENCE test_sequence
START WITH 10 --序列从10开始
INCREMENT BY 2 --序列每次增加2
MAXVALUE 100 --序列最大值100
MINVALUE 1 --序列最小值1
CYCLE --序列循环,每次增加2,一直到100后回到9重新开始
CACHE 10; --缓存中序列值个数为10
(二)序列使用
1、确定要用到序列的表是什么表
--创建学生表
CREATE TABLE STUDENT
(
SNO NUMBER(4) PRIMARY KEY,
SNAME VARCHAR2(20) NOT NULL,
COURSE VARCHAR2(20),
GRADE NUMBER(3)
)
2、创建序列
--创建序列STUDENT_SEQUENCE
CREATE SEQUENCE STUDENT_SEQUENCE
START WITH 1020 --序列从1000开始
INCREMENT BY 1 --序列每次增加1
3、使用序列
--使用序列STUDENT_SEQUENCE生成STUDENT表中SNO列插入值
INSERT INTO STUDENT
VALUES(STUDENT_SEQUENCE.NEXTVAL,'TOM','语文',85);
INSERT INTO STUDENT
VALUES(STUDENT_SEQUENCE.NEXTVAL,'JIM','数学',100);
INSERT INTO STUDENT
VALUES(STUDENT_SEQUENCE.NEXTVAL,'JIM','语文',99);
SELECT * FROM STUDENT;
4、查看当前序列值
--查看序列STUDENT_SEQUENCE序列当前值
SELECT STUDENT_SEQUENCE.CURRVAL FROM DUAL;
(三)修改序列
修改序列的要求
1、必须是序列的所有者或者ALTER ANY SEQUENCE权限才能修改序列;
2、除了START WITH不能修改,其他的都能改,直接给值就可以了;
3、最大值不能小于已经分配的序列值。
(四)删除序列
删除序列必须是序列的所有者或者具有drop any sequence权限的用户才能完成。
DROP SEQUENCE 序列号;