zoukankan      html  css  js  c++  java
  • Oracle中的序列

    前言:
           做过web开发的人员基本上都知道,数据库表中的主键值有的时候我们会用数字类型的并且自增。这样mysql、sql server中的都可以使用工具创建表的时候很容易实现。但是oracle中没有设置自增的方法, 一般情况我们会使用序列和触发器来实现主键自增的功能。下面这面文章主要介绍序列。
    知识点一:什么是序列?
          序列: 是oacle提供的用于产生一系列唯一数字的数据库对象。
    知识点二:序列有什么作用?
          1.自动提供唯一的数值
          2.共享对象
          3.主要用于提供主键值
          4.将序列值装入内存可以提高访问效率
    知识点三:怎么创建序列?
          1、要有创建序列的权限 create sequence 或 create any sequence
          2、创建序列的语法
               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 之前指定 ,二者应同时有效

               Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1
               Cycle cache 2;
               //先nextval 后 currval
               Select seqEmp.nextval from dual;
               Select seqEmp.currval from dual;
               Cache<max-min/increment

               //解释
              {
               Create 创建
               Sequence 序列 seqEmop 序列名称
               Increment by 步长
               Stat with 1 开始值
               Maxvalue 最大值
               Minvalue 最小值
               Cycle 循环 nocycle 不循环
               Cache 缓存 Cache<maxvalue-minvalue/increment by//一般不采用缓存
               Nextvalue 下一个
               Currval 当前值
              }

    知识点四:实例


        //实例应用
        //实现id的自动递增
        //第一步
        create table cdpt(
             id number(6),
             name varchar2(30),
            constraint pk_id primary key(id)
        );

       // 第二步

       Create sequence seq_cdpt
       Increment by 1
       Start with 1
       Maxvalue 999999
       Minvalue 1
       Nocycle
       nocache
       // 第三步
       insert into cdpt values(seq_cdpt.nextval,’feffefe’);
       commit;
       select * from cdpt;


    知识点五:什么时候会出现裂缝(不连续的情况)?
           序列在下列情况下出现裂缝:
           1.回滚
           2.系统异常
           3.多个表同时使用同一序列

    知识点六:怎么修改序列呢?
           //修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
          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 sequence seqEmp maxvalue 5;
                Select seqEmp.nextval from dual;
          修改注意:
                1.必须是序列的拥有者或对序列有 ALTER 权限
                2.只有将来的序列值会被改变
                3.改变序列的初始值只能通过删除序列之后重建序列的方法实现

    知识点七:怎么删除序列?
           1.使用DROP SEQUENCE 语句删除序列
            2.删除之后,序列不能再次被引用

    转自:https://blog.csdn.net/ethan_10/article/details/80690003https://www.cnblogs.com/adamgq/p/11208100.html

  • 相关阅读:
    Git push 常见用法
    Git commit 常见用法
    Git add 常见用法
    Git-仓库
    Git clone 常见用法
    Git-简介
    ZOJ Problem Set
    ZOJ Problem Set
    ZOJ Problem Set
    ZOJ Problem Set
  • 原文地址:https://www.cnblogs.com/shujk/p/12498589.html
Copyright © 2011-2022 走看看