Oracle:序列

1、什么是序列?
     ①类似于MySQL中的auto_increment自动增长机制,但oracle中无auto_increment机制。
     ②是oracle提供的一个产生唯一数值型值的机制。
     ③通常用于表的主键值。
     ④序列又能保证唯一,不能保证连续。声明:在oracle中,只有rownum永远保持从1开始,且继续。
     ⑤序列值,可放于内存,取之较快。
2、为什么要用序列?
     ①以前我们为主键设值,需要人工设值,容易错。
     ②以前每张表的主键值,是独立的,不能共享。
3、创建序列:、
     格式:

     CREATE SEQUENCE  序列名

       [INCREMENTBY1]

       [STARTWITH1]

       [{MAXVALUE |NOMAXVALUE}]

       [{MINVALUEn | NOMINVALUE}]

       [{CYCLE | NOCYCLE}]

       [{CACHE  | NOCACHE 20 }];
      说明:
                INCREMENT BY:指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
               STARTWITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
              MAXVALUE:指定序列可生成的最大值。
              NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
               MINVALUE:指定序列的最小值。
             NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
例:创建序列:

CREATE SEQUENCE dept_deptid_seq
                                      INCREMENT BY 10
                                      START WITH 120
                                      MAXVALUE 9999
                                      NOCACHE
                                      NOCYCLE;
4、NEXTVAL 和CURRVAL 伪列:
  lNEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
  lCURRVAL 中存放序列的当前值
  lNEXTVAL应在 CURRVAL之前使用,二者应同时有效。
具体使用:select 序列名.nextval from dual;
          select 序列名.currval from dual;
5、更改序列命令
注意:
(1)必须是序列的拥有者或对序列有 ALTER权限
(2)只有将来的序列值会被改变
(3)改变序列的初始值(start with)只能通过删除序列之后重建序列的方法实现

   ALTERSEQUENCE[user.]sequence_name
    [INCREMENT BY n]
    [MAXVALUE n| NOMAXVALUE]
    [MINVALUE n |NOMINVALUE];
    修改序列可以:
    1) 修改未来序列值的增量。
    2) 设置或撤消最小值或最大值。
    3) 转变缓冲序列的数目。
    4) 指定序列号是否是有序。
6、删除序列命令
    DROP SEQUENCE[user.]sequence_name;
    从数据库中删除一序列。
7、注意:序列在下列情况下出现裂缝:
①回滚
②系统异常
③多个表同时使用同一序列
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭