数据库中的sequences
一、概述
sequence是序列号的意思,每次取的时候它会自动增加(自增)。sequence与表没有从属关系,与表一样属于用户。
二、主要内容
1、Create Sequence语法
--首先用户要有CREATE SEQUENCE或者CREATE ANY SEQUENCE的权限。
CREATE SEQUENCE seqname [ INCREMENT increment ]
[ MINVALUE minvalue ] [ MAXVALUE maxvalue ]
[ START start ] [ CACHE cache ] [ CYCLE ][order]
注释: seqname: 序列名
increment : 递增数 ,例如increment by 1 就是递增1;increate by -1 就是递减1
minvalue: 序列最小值
maxvalue : 序列最大值,最大为27个9
start: 序列从哪个值开始,先去一部分序列值存入缓存,可以提高性能。缺点是发生系统故障后可能导致序列号不连续,可以设置为nocache保证不会发生序列跳动。默认值是20。
cycle:循环,到达最大值后,从最小值重新开始生成序列号,可以设置为nocycle表示累加不循环。
order: 保证按顺序申请。默认是noorder。ORDER和NOORDER的区别表现在并行服务和独占服务之间 打个比方:双CPU对同一个oracle DB 中的 ABC sequence申请序号时, 这时就有两个请求A和B,假设A请求在前B在后, 现在ABC序列中的值为9. 如果添加了ORDER选项,那么一定是A请求到9, B请求到10.但如果没有添加此选项,则有可能B请求到9, A请求到10.order一般用于时间戳类型,对于主键则用处不大。
例子:
CREATE SEQUENCE seq
minvalue 1 --最小值
INCREMENT BY 1 --递增1
START WITH 1 --从1开始
NOMAXvalue --无最大值
NOCYCLE --不循环
CACHE 100; --缓存100个序列号
三:下面介绍一下关于sequence 的生成,修改,删除等常用的操作:
1. 创建 Sequence
使用如下命令新建sequence(用户需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE权限):
CREATE SEQUENCE test_sequence INCREMENT BY 1 -- 每次加的个数据 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10 ; [注意] 如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache里面的取完后,oracle自动再取一组到cache。 但是,使用cache可能会跳号, 当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失. 因此,推荐在create sequence的时候使用 nocache 选项。
2. 使用 sequence:
sequence.CURRVAL -- 返回 sequence的当前值 sequence.NEXTVAL -- 增加sequence的值,然后返回 sequence 值
[注意] 第一次NEXTVAL返回的是初始值; 随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。
CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。 一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
sequence 存储在数据字典中,存储于user_sequences表 LAST_NUMBER 为最终序列号,也就是sequence游标当前所在的位置。
//get sequence last_number
SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME=TEST_SEQNAME
// NEXTVAL 使游标指向下一位(增一或减一)
SELECT SEQNAME.NEXTVAL FROM USER_SEQUENCES 得到下一位游标的值
3. 修改 Sequence
用户必须拥有ALTER ANY SEQUENCE 权限才能修改sequence. 可以alter除start至以外的所有sequence参数. 如果想要改变start值,必须 drop sequence 再 re-create.
命令格式如下:
ALTER SEQUENCE test_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到10000后从头开始 NOCACHE ;
4. 删除 Sequence DROP SEQUENCE order_seq;
数据库中的sequences相关推荐
- postgresql数据库中多个Schemas互相访问
背景: 用postgresql创建了一个数据库userDataBase,在这个数据库中创建了Schemas userA,Schemas userB,Schemas userC三个Schemas之后,给 ...
- 使用PHP从Access数据库中提取对象,第2部分
In the first part of this series we learned how to extract packaged objects from a legacy Access dat ...
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
- java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...
展开全部 //没看到有人回e68a843231313335323631343130323136353331333365646233答你,我还没学到框架,不知道那个是不是可以很便捷操作你说的这样过程 / ...
- 知识图:从图和数据库中获取知识
知识图:从图和数据库中获取知识 知识图到底是什么,以及关于它们的所有炒作是什么?如果想成为世界各地的Airbnbs,Amazon,Google和LinkedIn,那么学会区分真实的炒作,定义不同类型的 ...
- 用java向mysql数据库中插入数据为空
利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util ...
- bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...
最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...
- jdbc mysql查询显示图片_JDBC【向数据库中存入读取图片】
JDBC-向数据库中存入读取图片 注:此代码依赖自定义的数据库连接工具类 1.向数据库存入一张照片 import java.io.File; import java.io.FileInputStrea ...
- mysql数据库中nchar_MySQL数据库中CHAR与VARCHAR之争
在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char..这两种数据类型虽然都是用来存放字符型数据,但是无论从结构还是从数 据的保存方式来看,两者相差很大.而且其具体的实现方式,还 ...
最新文章
- 信号系统的一些基本概念
- 不疯狂的外星人,已疯狂的资本
- vs中项目解决方案和项目的关系
- 基于JAVA+SpringMVC+Mybatis+MYSQL的校友录管理系统
- 房子值500万租金仅3500元,卖房拿利息和出租哪个合算?
- 关于在openstack执行nova get-vnc-console命令,无法得到vnc url并提示服务器超时的问题描述...
- Windows任务管理器
- 【Unity3D】初学加密技巧(反破解)
- 玩转树莓派——游戏主机模拟器
- 银联网关支付,退款java实现
- 电线的粗细与电流的大小怎么算?电流的大小与电器的功率有什么关系? 如何根据电流的大小选择铜质电线的粗细...
- raw的服务器镜像是什么系统,如何将Ceph Raw格式镜像转换成Qcow2格式并上传云平台创建云主机...
- 计算机远程桌面连接有几种方式,远程桌面连接的2种方法
- Spatial Dropout
- 【python】numpy库np.percentile详解
- matlab hanning和hann,哪位大侠能告知——为什么在MATLAB2012中不能调研(汉宁)窗函...
- redis入门(三)
- 学生成绩管理系统E-R图
- MOSS 学习的比较好的网
- 前端时间选择器实现(包括两种形式,1、只有年月日 2、包含年月日:时分秒)
热门文章
- Linux dhclient命令使用
- 1、matlab页面和基本操作
- web开发技术,vue.js前端开发实战黑马程序员
- 阅读笔记:养女儿的四大要点!
- 翅膀里面是个r_两个翅膀中间一个字母R,是什么车?
- Problem H: 小学生算术
- 全球及中国甲基正丙基酮行业行业专项调查与投资战略研究报告2022-2028年
- python开发区_最新章节测试答案2020智慧树知道Python程序设计
- php5.4 xdebug,Xdebug—php调试工具
- c 语言中 %d,%lu等区别