• (二)Oracle学习笔记—— 序列


    1. 序列简介

    序列作为数据库里的对象,可以将序列值装入内存以提高访问效率,主要作用是生成唯一的主键值。其作用相当于一个计数器,它并不会与特定的表关联。通过创建Oracle序列和触发器实现表的主键自增。 

    2. 创建序列

    create sequence seqA1 
      increment by 1
      start with 1
      maxvalue 5
      minvalue 1
      cycle
      nocache;

    创建完成后在Sequences里可观察到已添加序列:

    查看序列:

    //先nextval 后 currval
    select seqEmp.nextval  from dual; 
    select seqEmp.currval  from dual;

    若用图形化创建则如下所示,可以看到序列的各个属性:

    创建语句解释:

    CREATE SEQUENCE sequence  //创建序列名称
           [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
           [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue
           [{MAXVALUE n | NOMAXVALUE}] //最大值
           [{MINVALUE n | NOMINVALUE}] //最小值
           [{CYCLE | NOCYCLE}] //循环/不循环
           [{CACHE n | NOCACHE}];//分配并存入到内存中
     
      NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
      CURRVAL 中存放序列的当前值
      NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

     3. 使用序列

      序列在下列情况下会出现裂缝:

    • 回滚
    • 系统异常
    • 多个表同时使用同一序列

    4. 修改序列

    //修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
    alter SEQUENCE sequence  //创建序列名称
           [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
           [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue
           [{MAXVALUE n | NOMAXVALUE}] //最大值
           [{MINVALUE n | NOMINVALUE}] //最小值
           [{CYCLE | NOCYCLE}] //循环/不循环
           [{CACHE n | NOCACHE}];//分配并存入到内存中

    修改序列的注意事项:

    •  必须是序列的拥有者或对序列有 ALTER 权限
    •  只有将来的序列值会被改变
    •  改变序列的初始值只能通过删除序列之后重建序列的方法实现(不能修改序列的初始值,否则会报ORA-02283)

    5. 删除序列

     使用DROP SEQUENCE 语句删除序列

     删除之后,序列不能再次被引用

     

    6. 使用sequence注意事项

    • currval总是返回当前sequence的值,只有在第一次nextval初始化后,才能使用currval,否则会出错。每使用一次nextval,就会增加一次sequence的值,同一个语句里面要是有多个nextval,其数值就是不一样的
    • 第一次nextval返回的值是初始值:随后的nextval会自动增加定义的increment by值,然后返回增加后的值
    • 如果指定cache值,oracle就可以预先在内存里面放置一些sequence,这样存取会更快,cache里面取完后,oracle自动再取一组到cache,使用cache或许会跳号,比如数据库突然不正常down掉,cache中的sequence就会丢失,可以在定义sequence的时候,使用nocache防止这种情况
  • 相关阅读:
    第一次团队作业
    第二次结对作业
    第一次结对作业
    制作简易的中文编译器
    第一次博客作业
    个人总结
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次编程作业
  • 原文地址:https://www.cnblogs.com/zjfjava/p/7168225.html
Copyright © 2020-2023  润新知