zoukankan      html  css  js  c++  java
  • oracle对象之序列

    是数据库对象,利用它可生成唯一的整数,序列对我们来说是比较重要的一个对象。

    MySQL的ID(主键)是可以自增长的

    但是Oracle没有这个东西,而Oracle咱们怎么来生成自动的id呢,就需要使用序列

    一般使用序列自动地生成表主键值或唯一键值。

    注:序列不属于任何一张表。因为它和表是同级的对象。

    一般来说,一个序列对应一张表

    语法:

    CREATE SEQUENCE [user.]sequence_name
    [increment by n]
    [start with n]
    [maxvalue n|]
    [minvalue n ];
    [cache]

         [NOCYCLE|CYCLE]

         INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。

         START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。

         MAXVALUE:指定序列可生成的最大值。

         MINVALUE:指定序列的最小值
       NOCYCLE:一直累加,不循环

          CYCLE:累加到最大值循环

    --查看数据库中当前用户创建的所有序列:
    select SEQUENCE_NAME from user_sequences;

    方式二:使用工具创建序列

    注:生成序列前需要给咱们的用户开放创建序列的权限

    第一步:登录plsql,左边找到Sequences,右键新建,如下

    使用序列生成主键

    序列的值:

    --currval :返回序列的当前值

    --nextval 返回序列首次引用时的起始值,以后使用nextval的引用将使用increment by 子句增加序列值,并返回新值。

    查看当前序列的方式:select stu_seq.currval from dual

    使用序列的方式:select stu_seq.nextval from dual

    我们以后生成主键就可以直接这样写:

    insert into employees(employees_id,last_name….)

           values(emp_seq.nextval,’zhang’……)

     2、修改序列语法:

    ALTER SEQUENCE 序列名 
      [INCREMENT BY n] 
      [{MAXVALUE/ MINVALUE n|NOMAXVALUE}] 
      [{CYCLE|NOCYCLE}] 
      [{CACHE n|NOCACHE}];

    *不能修改序列的初始值

    3、删除序列语法:

    DROP SEQUENCE 序列名;

    hibernate使用oracle:

    采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL这种不支持sequence的数据库则不行(可以使用identity)。

    <generator class="sequence">

    <param name="sequence">hibernate_id</param>

    </generator>

    <param name="sequence">hibernate_id</param> 指定sequence的名称

    Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时必须先创建一个sequence,如果不指定sequence名称,则使用Hibernate默认的sequence,名称为hibernate_sequence,前提要在数据库中创建该sequence。

    特点:只能在支持序列的数据库中使用,如Oracle。

  • 相关阅读:
    Spring@Profile注解
    day 32 子进程的开启 及其用法
    day 31 udp 协议SOCK_DGRAM
    day 30 客户端获取cmd 命令的步骤
    day 29 socket 理论
    day 29 socket 初级版
    有关 组合 继承
    day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
    新式类和经典类的区别
    day 28 hasattr getattr serattr delattr 和带__内置__ 类的内置方法
  • 原文地址:https://www.cnblogs.com/spdboke/p/6867586.html
Copyright © 2011-2022 走看看