oracle数据库--序列(sequence)
一个问题:
在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动的增长,怎么处理?
解决方式:oracle是利用“序列”(sequence)来完成的。
序列(sequence)介绍
oracle中,是通过使用序列(sequence)来处理自动增长列。
(1)可以为表中的列自动产生值。
(2)由用户创建数据库对象,并可由多个用户共享。
(3)一般用于主键或唯一列。
创建序列基本语法:
create sequence 序列名称
start with 开始数字
increment by 增长数字
minvalue 最小值
maxvalue 最大值
cycle
nocache
详细说明:
start with 开始数字à从几开始
increment by 增长à步长,每次增长几个数
minvalue 最小值
maxvalue 最大值à可以不设置,不设置应写为nomaxvalue,也就是无穷大
cycle 循环,也就是说当长增长到最大值后,再从最小值开始重新增长
nocache 不设缓存
案例说明:
create sequence my_seq --创建序列名
start with 1 --从1开始
increment by 1 --每次增长1
maxvalue 999999999 --最大值 //nomaxvalue(不设置最大值)
minvalue 1 --最小值
cycle --循环 //nocycle(一直累加,不循环)
nocache --不使用缓存
解释:从1开始,每次增长1,最大值999999999,之后循环从1开始。
create sequence myseq
start with 0
increment by 1
minvalue 0
nomaxvalue
nocycle
nocache;
解释:从0开始,每次增长1,最小值0,无穷大,不循环一直累加。
sequence的使用:
create table test1(id number primary key,name varchar2(32));
insert into test1 values(myseq.nextval,'abc');
insert into test1 values(myseq.nextval,'ddd');
特别说明:
1、myseq:表示序列的名字,nextval:关键字,表示从序列中取下一个值。
2、sequence序列是需要配合number类型的列来使用;
3、sequence序列是要在主键或unique列上使用的。
问题:
如果system用户使用scott的sequence的序列时,sequence是从1增长还是从已使用到的数字开始?
答案:是从已使用到的数字接着增长。
细节说明:
看例子:
insert into emp values(my_seq.nextval,'tomcat','clerk',7566,sysdate,1200,null,20);
select my_seq.currval from dual;
注意:
第一次使用nextval返回的是初始值;
随后的nextval会自动增加你定义的increment by值,然后返回增加后的值;
currval总是返回当前sequence的值,但是在第一次nextval初始化之后才能使用currval,否则会出错。
使用一次nextval会增加一次sequence的值,所以如果你在同一个语句里面使用多个nextval,其值就是不一样的。
如果指定cache值,oracle就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shotdown abort),cache中的sequence就会丢失,所以可以在create sequence的时候用nocache防止这种情况。
一旦定义了某个序列,你就可以用currval,nextval
currval:返回sequence的当前值
nextval:增加sequence的值,然后返回sequence值。
比如:
序列名.crrval
序列名.nextval
什么时候使用sequence?
不包含子查询、snapshot/view的select的语句
insert语句的子查询中
insert语句的values中
update的set中
如:update 表名 列值=序列名.nextval where 条件;
在sqlserver和mysql中都可以在定义表的时候,直接给指定自增长。
sqlserver中设置自增长
create table 表名(id int primary key identity(1,1),name varchar(32));
mysql中设置自增长
create table 表名(id int primary key auto_incrment,name varchar(32));
oracle数据库--序列(sequence)的更多相关文章
- EF中创建、使用Oracle数据库的Sequence(序列)功能
** 背景 ** 项目中订单号原来的生成规则由日期加随机数组成,后期需求决定将订单号生成规则更改为生成日期加当天当前订单数. 每天的订单数都是从0开始的,每生成一个订单,订单数就应该加1.订单数应该是 ...
- 【转】Oracle数据库中Sequence的用法
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE S ...
- Oracle数据库---序列、索引、同义词
--创建序列create sequence deptno_seqstart with 50increment by 10maxvalue 70cache 3; --为了方便演示,创建了一个和dept表 ...
- 序列sequence中的cache问题
Oracle中序列Sequence的创建语法如下: CREATE SEQUENCE [ schema. ] sequence [ { INCREMENT BY | START WITH } integ ...
- ORACLE数据库入门再在屋里坐会
一.数据库简介 数据库概述 数据库(database)是按照数据结构来组织,存储和管理数据的仓库,它产生与距今五十年前. 简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数 ...
- Oracle数据库中序列(SEQUENCE)的用法详解
Oracle数据库中序列(SEQUENCE)的用法详解 在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...
- Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence
Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...
- Oracle数据库学习 视图、序列及存储过程
视图(View) 视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示. 视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字. 视图本身不包含任何数据,它只是包含映射到基表的一个查 ...
- Oracle数据库之序列
Oracle数据库之序列(sequence) 序列是一个计数器,它并不会与特定的表关联.我们可以通过创建Oracle序列和触发器实现表的主键自增.序列的用途一般用来填充主键和计数. 一.创建序列 语法 ...
随机推荐
- 将搜狗词库(.scel格式)转化为txt格式
参考:http://blog.csdn.net/zhangzhenhu/article/details/7014271 #!/usr/bin/python # -*- coding: utf-8 -* ...
- IOS开发之XCode学习013:步进器和分栏控件
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.定义UIStepper和UISegmente ...
- JAVA简单的网格布局管理器--JAVA基础
网格布局管理器: GridLayoutDemo.java: import java.awt.GridLayout;import javax.swing.JButton;import javax.swi ...
- 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站
Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...
- mini-css-extract-plugin 的用法(webpack4)
今天在使用webpack的extract-text-webpack-plugin插件提取单独打包css文件时,报错,说是这个插件要依赖webpack3的版本. 后面查了一下,webpack4得使用mi ...
- 【Luogu1272】重建道路(动态规划)
[Luogu1272]重建道路(动态规划) 题面 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲 ...
- 【Luogu1373】小a和uim之大逃离(动态规划)
[Luogu1373]小a和uim之大逃离(动态规划) 题面 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布 ...
- 【BZOJ4538】【HNOI2016】网络(树链剖分,线段树,堆)
题目链接,我是真的懒得调题目的格式... 题解 树链剖分搞一下LCA 把线段树弄出来 这只是形式上的线段树 本质上是维护一段区间的一个堆 每次把堆插入节点, 询问的时候查询线段树上的堆的最大值就行了 ...
- [BZOJ4736]温暖会指引我们前行
BZOJ(BZOJ上的是什么鬼...) UOJ 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很低. 小 ...
- THUWC2018咸鱼记
Day -inf 好不容易联赛水进来了 好虚啊...(萌新)什么都不会...只会大水题 估计要\(GG\)了,瑟瑟发抖 准备辣.. 自我介绍根本没面试,就没脸贴了 周围的大佬们(尤其\(Zsy\))还 ...