Oracle 中的序列
一、前言
序列 (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 中的序列相关推荐
- Oracle中的序列,同义词
Oracle中的序列,同义词 2006年08月18日 星期五 下午 01:51 什么叫序列: 1:定义: 仅向前的数字变量(和SQL中的自动编号有点像 identity(1,2 ...
- oracle实现序列,oracle中创建序列和自增长列的实现方式
众所周知,在SQL Server中设置自增长列很简单,但是在ORACLE中则不然,现在介绍一下ORACLE中自增长列如何实现: 1.创建序列. 举例如下: create sequence seq_pe ...
- Oracle中Sequence序列的使用
在oracle中sequence就是序列,每次取的时候它会自动增加.Sequence与表没有关系. 1.Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY ...
- mysql seq 重置_需要在Oracle中重置序列的值
小编典典 如果使用该值,则不应重置该值的原因: 如果你有20条记录并删除5-10条记录会怎样?中间有一个缝隙,无法重新设置序列.序列永远不会生成无间隙的数字序列,即完美的1.2 .. n. 如果你调用 ...
- Oracle中的序列 sequence 用法
sybase 同埋sqlserver 系冇序列呢样野的. 但系oralce有. oralce 序列简单d来讲类似于sybase的递增列的机制, 但是sybase 一张表只允许1个递增列, 而oracl ...
- oracle中的序列 cache,oracle row cache lock 之sequence
今天遇到一个生产库产生大量row cache lock,以下是相应步骤: 1 查询当时P1的情况 select INSTANCE_NUMBER,p1,count(*) cnt from dba_his ...
- oracle查看表空间的序号,Oracle查询所有序列
--查看当前用户的所有序列 select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences where sequence_owner='用户名'; --查 ...
- MySQL中使用序列-Sequence
在Oracle数据库中若想要一个连续的自增的数据类型的值,可以通过创建一个sequence来实现.而在MySQL数据库中并没有sequence.通常如果一个表只需要一个自增的列,那么我们可以使用MyS ...
- Oracle中序列(Sequence)详解
Oracle中序列(Sequence)详解 一 序列定义 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用 ...
最新文章
- CLR via C#深解笔记二 - 类型设计
- java 重载 返回_java – 返回方法重载
- nyoj-619 青蛙过河
- python 定义变量_用python解决动态的定义变量名(并给其赋值方法:大数据处理)...
- Python将绝对路径转换为相对路径方法实例
- UTC/GMT 时间转换
- 2017年云主机性能测评报告
- 使用正则表达式时,容易出错的地方~
- RxJava2 方法总结
- bert代码使用详解
- [leedcode 229] Majority Element II
- 剑指 Offer 07. 重建二叉树(day02)
- python从入门到实践答案第十章_Python编程:从入门到实践——【作业】——第十章(文件和异常)...
- python怎么添加ui_大神可以帮我看看怎么把这个python代码利用ui运行呢
- alpha-beta剪枝算法
- Mockplus 3.2前瞻,五大特色功能让你惊喜!
- GNSS观测数据下载地址
- mysql sphinx windows安装_Sphinx在windows下如何安装使用
- 2020年如何利用外链提升网站排名和权重?
- Kubernetes学习之污点
热门文章
- 如何在富途证券开户,富途证券如何开户,如何开通港股账户,如何炒港股
- 关于SpringOpenSessionInViewFilter的配置及处理方案
- arcgis 线自动构面的方法一例
- 华硕发布全球首款8G内存手机ZenFone VR
- 文献阅读(60)ACL2021-Attention Calibration for Transformer in Neural Machine Translation
- codeforces 581B Luxurious Houses(线段树点更新,区间查询)
- 一篇文章带你了解!什么是贴近摄影测量
- 多线程就一定快吗?天真!
- Xilinx MIG IP核app_wdf_rdy信号一直为低
- C++ 上溢和下溢(overflow underflow)