• Oracle数据库之序列


    Oracle数据库之序列(sequence)

    序列是一个计数器,它并不会与特定的表关联。我们可以通过创建Oracle序列和触发器实现表的主键自增。序列的用途一般用来填充主键和计数。

    一、创建序列

    语法结构:

    CREATE SEQUENCE [ schema. ] sequence_name
      [ { INCREMENT BY | START WITH } integer
      | { MAXVALUE integer | NOMAXVALUE }
      | { MINVALUE integer | NOMINVALUE }
      | { CYCLE | NOCYCLE }
      | { CACHE integer | NOCACHE }
      | ...
      ]...
    ;

    完整语法结构见:http://docs.oracle.com/database/121/SQLRF/statements_6017.htm#SQLRF01314

    说明:

    1. schema:模式,即用户名称
    2. sequence_name:序列名称
    3. INCREMENT BY:定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
    4. START WITH:定义序列的初始值,默认为1。
    5. MAXVALUE:序列生成器能产生的最大值。NOMAXVALUE是默认选项,代表没有最大值定义。
    6. MINVALUE:序列生成器能产生的最小值。NOMINVALUE是默认选项,代表没有最小值定义。
    7. CYCLE和NOCYCLE:当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值,最小值为1。对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
    8. CACHE:定义存放序列的内存块的大小,默认为20,相当于预加载。缓冲部分序列计数以便更快获取序列值,可以改善序列的性能,但缓存选项可能会造成数据丢失。NOCACHE表示不缓冲。

    示例:

    CREATE SEQUENCE customers_seq
        START WITH 1000
        INCREMENT BY 1
        NOCACHE
        NOCYCLE;

    二、删除序列

    语法:

    DROP SEQUENCE [ schema. ] sequence_name ;

    示例:

    DROP SEQUENCE customers_seq;

    三、使用序列

    序列有两个属性能够获取序列的值:

    CURRVAL:返回序列的当前值。

    NEXTVAL:返回序列下一个值。

    示例:.

    INSERT INTO customers(id) VALUES (customers_seq.NEXTVAL);
    SELECT customers_seq.CURRVAL FROM dual;

    四、修改序列

    语法:

    ALTER SEQUENCE [ schema. ] sequence_name
      { INCREMENT BY integer
      | { MAXVALUE integer | NOMAXVALUE }
      | { MINVALUE integer | NOMINVALUE }
      | { CYCLE | NOCYCLE }
      | { CACHE integer | NOCACHE }
      | ...
      } ...
    ;

    完整语法结构见:http://docs.oracle.com/database/121/SQLRF/statements_2014.htm#SQLRF00817

    注意,不能修改序列的初始值,否则会报ORA-02283。如果需要修改初始值,先删除序列再重新创建序列设定初始值。

    示例:

    ALTER SEQUENCE customers_seq 
        MAXVALUE 1500;
    ALTER SEQUENCE customers_seq 
        CYCLE
        CACHE 5; 

    五、序列查看

    SELECT * FROM USER_SEQUENCES;

    SELECT * FROM ALL_SEQUENCES;

    SELECT * FROM DBA_SEQUENCES;

  • 相关阅读:
    mina之小小总结(标准的菜鸟级别,行家勿入)
    tomcat(就一句话,自己的日记性质)
    MINA转自itoyo
    java web(没含量的,百科上的)
    解决VS.NET 2008中aspx文件没有设计界面
    正则表达式教程
    [VB] Option Explicit
    sql自定義函數 包含遊標
    sql 中 null+others=?
    实用手机号、IP、身份证号、歌曲查询接口
  • 原文地址:https://www.cnblogs.com/zf29506564/p/5759990.html
Copyright © 2020-2023  润新知