oracle 11g中的序列

版权声明:本文为博主原创,转载请附原文链接。 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;

猜你喜欢

转载自blog.csdn.net/bibibrave/article/details/82532685