版权声明:本文为博主原创,转载请附原文链接。 https://blog.csdn.net/bibibrave/article/details/82532685
一、序列
序列是用于生成唯一、连续序号的对象
序列可以是升序的(步长正),也可以是降序的(步长负)
使用CREATE SEQUENCE语句创建序列
语法:
① 创建序列需要有创建序列的权限:
grant create sequence to scott ; --创建序列的权限属于resource这个角色。
create sequence seqname
start with 1 --指定序列从哪里开始
increment by 1 --指定序列的增长速度(步长)可正可负
maxvalue 2000 --指定该序列的最大值
minvalue 1 --指定该序列的最小值
nocycle --达到最大值,循环(即又从1~2000)cycle 不循环nocycle
cache 10 ; --指定内存预先分配的序号数 例10
②cache解释:
首先,选取序列中的某一个值如4,有两种方法,一是oracle计算出4,然后返回给用户,下次你需要5,oracle又会重新计算一遍返回给你,另一种是你需要4,oracle把4,5,6,7,8,9,10等都取出来放在内存中,下一次再取5,oracle直接从内存中返回给你。cache 10 就是把4~13这十个数都取出来放到内存中,瑕疵直接从内存中读取,提高了查询速度。 在创建序列时,不写cache ,一个序列的默认cache为20
③查看用户自己拥有的序列:
select * from user_sequence;
二、访问序列:
可以通过序列的伪列来访问序列的值;
- NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
第一次使用序列中的值的时候,要使用NEXTVAL
select seqname.nextval from dual;
select seqname.currval from dual;
序列的应用:
create sequence seq1 start with 1 increment by 1 maxvalue 1000 minvalue 1 nocycle;
create table student (sno number(4),sname varchar2(10));
insert into student values(seq1.nextval , 'A');
insert into student values(seq1.nextval , 'AB');
insert into student values(seq1.nextval , 'ABC');
-- 如此便实现了学号的自增。
序列的修改与删除:
序列的修改除了start with 参数无法修改以外,其余参数均可修改。
ALTER SEQUENCE seqname MAXVALUE 5000 CYCLE;
DROP SEQUENCE seqname;