• Oracle序列


    序列是用来生成唯一,连续的整数的数据库对象。序列通常用来自动生成主键或唯一键的值。序列可以按升序排列,也可以按降序排列。
    创建序列语法:
    create sequence 序列名称
    [start with 初始量]
    [increment by 递增量]
    [maxvalue 最大值| nomaxvalue]
    [minvalue 最小值| nominvalue]
    [cycle | nocycle]
    [cache 缓存个数| nocache];
    start with:生成第一个序列号,对于升序列,其默认值为序列最小值;对于降序序列,其默认值为序列的最大值 。
    increment by:用于指定序列号之间的间隔,其默认值为1,如果integer为正值,则生成的序列按升序排列,如果integer为负值,则生成的序列将按降序排列。
    maxvalue:序列可以生成的最大值。
    nomaxvalue:Oracle将升序序列的最大值设为1027,将降序序列的最大值设为-1.这是默认选项。
    minvalue:minvalue必须小于或等于start with的值,并且必须小于maxvalue的值。
    nominvalue:oracle将升序的最小值设为1,或将降序序列的最小值设为-1026.这是默认值。
    cycle:序列在达到最大值或最小值后,将继续从头开始生成值。
    nocycle:序列在达到最大值或最小值后,将不能再继续生成值。不写默认为nocycle这是默认选项 。
    cache:预先分配一组序列号,并将其保留在内存中,这样可以更快地访问序列号.当用完缓存中的所有序列号.oracle将生成另一组数值,并将其保留在缓存中。
    nocache:不会加快访问速度而预先分配序列号,如果在创建序列时忽略了cache和nocache,orcale将默认缓存20个序列号。
    创建序列
    createsequence seq_tb_personminvalue1maxvalue999999999999999999999999999startwith1incrementby1cache20;
    创建序列:从1开始,每次增加1,最大值不受限制,不循环,缓存10个序列号。
    create sequence Users_SEQ
    increment by 1
    start with 1
    minvalue 1 nomaxvalue
    NOCYCLE --在达到最大值后停止生成下一个值
    cache 10;
    序列的使用:
    创建序列号:
    create sequence grade_Id
    创建表:
    create table grade
    (
    gid number primary key not null,
    score number not null
    ) tablespace roottablespace
    利用序列号向表中添加数据:
    insert into grade(gid,score) values(grade_Id.Nextval,95)
    insert into grade(gid,score) values(grade_Id.Nextval,90)
    查询数据
    select *from grade
    修改序列语法:
    alter sequence 序列名称
    [start with 初始量]
    [increment by 递增量]
    [maxvalue 最大值| nomaxvalue]
    [minvalue 最小值| nominvalue]
    [cycle | nocycle]
    [cache 缓存个数| nocache];
    修改序列
    altersequence seq_tb_personminvalue1maxvalue999999999999999999999999999--start with 49 对于已经启动的序列,无法设置初始值incrementby1cache20;
    删除序列
    drop sequence 序列名;
    select grade_Id.NEXTVAL from dual --第一次使用NEXTVAL时,返回该序列的初始值。以后在引用NEXTVAL时,将返回新增。
    select grade_Id.CURRVAL from dual --返回序列的当前值,即最后一次引用NEXTVAL时返回的值。
    注意事项:
    一个序列可以被多张别使用,不过一般建议为每个表建立单独的序列。
    当使用到序列的事务发生回滚。会造成序列号不连续。在用生成的序列值作为编号做插入数据库操作时,可能遇到事务提交失败,从而导致序号不连续。
    大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 n个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache个数最好不要设置过大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最大的序列号+1 开始存入n个。这种情况也能会在数据库关闭时也会导致序号不连续。

  • 相关阅读:
    最短路 dijkstra 优先队列
    树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)
    c++优先队列(堆)
    团体程序设计天梯赛 L3-012. 水果忍者
    团体程序设计天梯赛 L2-028. 秀恩爱分得快
    团体程序设计天梯赛 L1-049. 天梯赛座位分配(测试数据+不同方法)
    奇偶校验——设计可以检验错误位置的方法
    奇偶校验的错误概率
    Fibonacci数列时间复杂度之美妙
    团体程序设计天梯赛 L3-016. 二叉搜索树的结构
  • 原文地址:https://www.cnblogs.com/Memories-off/p/10435412.html
Copyright © 2020-2023  润新知