java oracle 序列_Oracle之序列

一、序列概述

在Oracle中,可以用Sequence序列号生成器,为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要用途是生成表的主键值,可以在插入语句中引用,在插入之前,获取序列号nextval值,然后进行插入。在用序列号之前,首先得创建一个序列,然后就可以通过CURRY、NEXTVAL,获取当前表中返回sequence的当前值、下一个squence的值。

二、如何定义一个sequence?

1、PL/SQL工具创建:

create sequence 序列名称   --创建序列

start with    --从几开始

increment by    --每次增长多少

maxvalue | nomaxvalue   --最大值

minvalue | nominvalue   --最小值

cycle | nocycle   --是否循环

cache | nocache ;   --缓存的数量

三、如何使用sequence?

1、xml使用:

序列名.NEXTVAL    -- 获取下一个sequence的值

序列名.CURRVAL   -- 获取当前的sequence的值

注意: 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加定义的INCREMENT BY值 然后返回增加后的值。

CURRVAL 总是返回当前sequence的值,但是在第一次NEXTVAL 初始化之后才能使用CURRVAL,否则会出错。Sequence永不回头的往下取数据,无论发是否生异常,回滚 。

2、注解使用:

@GeneratedValue和@SequenceGenerator是JPA标准注解,GeneratedValue用来定义生成策略,SequenceGenerator用来声明生成主键的序列;它们要联合使用才有效:

① 在Entity实体类中通过使用注解@SequenceGenerator声明定义好的序列,有两种声明方法,可以在类上进行声明,也可以在字段上进行声明

@SequenceGenerator(name=" ", sequenceName=" ", allocationSize =" ") :

name   -- 表示生成策略名称,它被引用在@GeneratedValue中的“gernerator”值中。

sequenceName   -- 表示生成策略用到的数据库序列名称。

initialValue   -- 表示主键初始值,默认为0。

allocationSize   -- 每次主键值增加的大小,默认为50。

②在主键字段上使用注解@GeneratedValue定义生成策略 (默认调用native策略),并引用声明好的序列

@GeneratedVlaue(strategy=GenerationType.IDENTITY 或 SEQUENCE ,generator=" "):

strategy   -- 表示生成策略;主键自增策略:identity是MySql对应的自增、sequence对应oracle的自增序列,native是根据所连接的数据库自动选择上诉两个或hilo策略

generator   -- 表示声明好的生成策略,引用@SequenceGenerator中的"name"的值。

e5c7b850b25d43da71ed8ccdb1a66578.png

四、可以在哪些地方使用Sequence?

1、不包含子查询、snapshot、VIEW的 SELECT 语句;2、INSERT语句的子查询中;3、INSERT语句的VALUES中;4、UPDATE 的 SET中

五、如何删改Sequence?

1、DROP sequence xxx_seq;

2、如果要改变sequence中的初始值,必须先删除序列号然后再进行创建。或者是该sequence的owner,或者有ALTER ANY sequence权限才能改动sequence,直接用Alter语句进行sequence的更新。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值