zoukankan      html  css  js  c++  java
  • oracle之sequence详解

    Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方。

    sequence的创建需要用户具有create sequence或者create any sequence的权限。


    1、创建sequence

    create sequence seq_name
    INCREMENT BY 1 -- 每次加几个 
    START WITH 1 -- 从1开始计数 
    NOMAXvalue -- 不设置最大值(最小值:minvalue,最大值:maxvalue) 
    NOCYCLE -- 一直累加,不循环 
    CACHE 10; -- 设置缓存cache个序列,
    如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache里面的取完后,oracle自动再取一组到cache。 但是,使用cache可能会跳号, 当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失. 因此,推荐在create sequence的时候使用 nocache 选项。

    2、删除sequence

    drop sequence seq_name;

    3、修改sequence

    可以修改除start值以外的属性值,如:

    alter sequence seq_name maxvalue 9999;

    如果需要修改sequence的start和minvalue值,需要重建sequence。


    使用sequence

      CurrVal:返回 sequence的当前值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。 

      NextVal:增加sequence的值,然后返回增加后sequence值,
    第一次NEXTVAL返回的是初始值,随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

    可以在Sql语句中可以使用sequence的地方:

    -> 不包含子查询、snapshot以及VIEW的 SELECT 语句 
    -> INSERT语句的子查询中 
    -> INSERT语句的values中 
    -> UPDATE 的 SET中
    
    
    sequence的中断

    当回滚的语句中包含sequence时,该sequence就会产生中断;

    当sequence启用cache时,sequence的值会载入内存,当系统异常关机重启时,内存中的sequence值会丢失进而导致中断。

  • 相关阅读:
    c语言中的rewind函数,Win CE 不支持,可用fseek函数替换
    接口隔离原则(转)
    接口设计的 11 种原则 (转)
    设计模式六大原则/接口设计六大原则 之 组合/聚集复用原则(转)
    C++ 求幂的运算符是什么?
    设计模式六大原则/接口设计六大原则 之 迪米特法则(转)
    解决mysql出现“the table is full”的问题
    tomcat远程调试设置
    这些习惯很伤肾 要警觉
    从ie临时文件夹一次复制多个文件
  • 原文地址:https://www.cnblogs.com/upcyaya/p/4845662.html
Copyright © 2011-2022 走看看