一、前言

序列 (SEQUENCE) 是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。

其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

mysql有自增主键,oracle没有、就用序列。

二、创建序列

创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:

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

其中:

1、INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。

2、START WITH 定义序列的初始值(即产生的第一个值),默认为1。

3、MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。

4、MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。

5、CYCLE 和 NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。

6、CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

7、NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。

8、CURRVAL 中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。

三、创建序列实例

创建一个序列,从1开始,步长为1,最小值为0;不循环,每次缓存20个。其他采取默认值。

/*菌毒种样本资源表*/
CREATE SEQUENCE SEQ_mic_Sample_Resource
INCREMENT BY 1
START WITH 1
MINVALUE 0
NOCYCLE
CACHE 20

序列创建后,可以使用序列的NEXTVAL来获取序列的下一个值,使用CURRVAL来查看当前值。第一次使用必须先使用NEXTVAL来产生一个值后才可以使用CURRVAL进行查看。

//序列调用 产生一个新的序列
select seq_test.nextval from dual//查看当前序列的值
select seq_test.currval from dual

如果第一次直接使用CURRVAL来访问序列,就会报错。

在实际开发中的应用:

<insert id="saveMicMicrobeRecord" ><selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="id">SELECT SEQ_MIC_MICROBE_RECORD.nextval as ID from DUAL</selectKey>insert into MIC_MICROBE_RECORD("ID", MICROBE_NAME, DANGER_DEGREE, "USAGE", TURNOVER)values(#{id}, #{microbeName}, #{dangerDegree}, #{usage}, #{turnover})</insert>

使用这样的方式,新插入的数据、会同时返回id;即在同一方法中做另一条插入时,就可使用刚才插入的id作为外键,mysql中也有类似的功能。

Oracle 中的序列相关推荐

  1. Oracle中的序列,同义词

    Oracle中的序列,同义词 2006年08月18日 星期五 下午 01:51 什么叫序列:     1:定义:         仅向前的数字变量(和SQL中的自动编号有点像 identity(1,2 ...

  2. oracle实现序列,oracle中创建序列和自增长列的实现方式

    众所周知,在SQL Server中设置自增长列很简单,但是在ORACLE中则不然,现在介绍一下ORACLE中自增长列如何实现: 1.创建序列. 举例如下: create sequence seq_pe ...

  3. Oracle中Sequence序列的使用

    在oracle中sequence就是序列,每次取的时候它会自动增加.Sequence与表没有关系.  1.Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY ...

  4. mysql seq 重置_需要在Oracle中重置序列的值

    小编典典 如果使用该值,则不应重置该值的原因: 如果你有20条记录并删除5-10条记录会怎样?中间有一个缝隙,无法重新设置序列.序列永远不会生成无间隙的数字序列,即完美的1.2 .. n. 如果你调用 ...

  5. Oracle中的序列 sequence 用法

    sybase 同埋sqlserver 系冇序列呢样野的. 但系oralce有. oralce 序列简单d来讲类似于sybase的递增列的机制, 但是sybase 一张表只允许1个递增列, 而oracl ...

  6. oracle中的序列 cache,oracle row cache lock 之sequence

    今天遇到一个生产库产生大量row cache lock,以下是相应步骤: 1 查询当时P1的情况 select INSTANCE_NUMBER,p1,count(*) cnt from dba_his ...

  7. oracle查看表空间的序号,Oracle查询所有序列

    --查看当前用户的所有序列 select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences where sequence_owner='用户名'; --查 ...

  8. MySQL中使用序列-Sequence

    在Oracle数据库中若想要一个连续的自增的数据类型的值,可以通过创建一个sequence来实现.而在MySQL数据库中并没有sequence.通常如果一个表只需要一个自增的列,那么我们可以使用MyS ...

  9. Oracle中序列(Sequence)详解

    Oracle中序列(Sequence)详解 一 序列定义 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用 ...

最新文章

  1. CLR via C#深解笔记二 - 类型设计
  2. java 重载 返回_java – 返回方法重载
  3. nyoj-619 青蛙过河
  4. python 定义变量_用python解决动态的定义变量名(并给其赋值方法:大数据处理)...
  5. Python将绝对路径转换为相对路径方法实例
  6. UTC/GMT 时间转换
  7. 2017年云主机性能测评报告
  8. 使用正则表达式时,容易出错的地方~
  9. RxJava2 方法总结
  10. bert代码使用详解
  11. [leedcode 229] Majority Element II
  12. 剑指 Offer 07. 重建二叉树(day02)
  13. python从入门到实践答案第十章_Python编程:从入门到实践——【作业】——第十章(文件和异常)...
  14. python怎么添加ui_大神可以帮我看看怎么把这个python代码利用ui运行呢
  15. alpha-beta剪枝算法
  16. Mockplus 3.2前瞻,五大特色功能让你惊喜!
  17. GNSS观测数据下载地址
  18. mysql sphinx windows安装_Sphinx在windows下如何安装使用
  19. 2020年如何利用外链提升网站排名和权重?
  20. Kubernetes学习之污点

热门文章

  1. 如何在富途证券开户,富途证券如何开户,如何开通港股账户,如何炒港股
  2. 关于SpringOpenSessionInViewFilter的配置及处理方案
  3. arcgis 线自动构面的方法一例
  4. 华硕发布全球首款8G内存手机ZenFone VR
  5. 文献阅读(60)ACL2021-Attention Calibration for Transformer in Neural Machine Translation
  6. codeforces 581B Luxurious Houses(线段树点更新,区间查询)
  7. 一篇文章带你了解!什么是贴近摄影测量
  8. 多线程就一定快吗?天真!
  9. Xilinx MIG IP核app_wdf_rdy信号一直为低
  10. C++ 上溢和下溢(overflow underflow)