一个问题:

在某张表中,存在一个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)的更多相关文章

  1. EF中创建、使用Oracle数据库的Sequence(序列)功能

    ** 背景 ** 项目中订单号原来的生成规则由日期加随机数组成,后期需求决定将订单号生成规则更改为生成日期加当天当前订单数. 每天的订单数都是从0开始的,每生成一个订单,订单数就应该加1.订单数应该是 ...

  2. 【转】Oracle数据库中Sequence的用法

    在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE S ...

  3. Oracle数据库---序列、索引、同义词

    --创建序列create sequence deptno_seqstart with 50increment by 10maxvalue 70cache 3; --为了方便演示,创建了一个和dept表 ...

  4. 序列sequence中的cache问题

    Oracle中序列Sequence的创建语法如下: CREATE SEQUENCE [ schema. ] sequence [ { INCREMENT BY | START WITH } integ ...

  5. ORACLE数据库入门再在屋里坐会

    一.数据库简介 数据库概述 数据库(database)是按照数据结构来组织,存储和管理数据的仓库,它产生与距今五十年前. 简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数 ...

  6. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  7. Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence

    Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...

  8. Oracle数据库学习 视图、序列及存储过程

    视图(View) 视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示. 视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字. 视图本身不包含任何数据,它只是包含映射到基表的一个查 ...

  9. Oracle数据库之序列

    Oracle数据库之序列(sequence) 序列是一个计数器,它并不会与特定的表关联.我们可以通过创建Oracle序列和触发器实现表的主键自增.序列的用途一般用来填充主键和计数. 一.创建序列 语法 ...

随机推荐

  1. 获取Filter的三种途径

    一.通过CLSID [cpp] view plaincopyprint? IBaseFilter *pF = 0; HRESULT hr = CoCreateInstance(clsid, 0, CL ...

  2. Django学习-18-中间件

    为了验证中间件功能和函数执行过程,手动注册3个中间件到setting.py文件中 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddlewa ...

  3. HTML基础加强

    1. 什么是浏览器:解释和执行HTML源码的工具. 2. 什么是静态页面,什么样的页面是动态页面? 静态页面:htm,html(直接读取) 动态网页:asp,aspx,jsp,php(里面有代码请求时 ...

  4. 编译器重复定义错误:error C2371: 'SIZE' : redefinition; different basic types

    我们常常会定义自己工程用的数据类型,可能会与Windows的基本数据类型冲突. vs会报重复定义错误:error C2371: 'SIZE' : redefinition; different bas ...

  5. 深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)

    一.CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 二.LeNet-5网络 输入尺寸:32 ...

  6. [Luogu2617]Dynamic Ranking

    题面戳这 类似算法总结 1.静态整体Kth 滑稽吧...sort一遍就好了. 时间复杂度\(O(nlogn)\) 空间复杂度\(O(n)\) 2.动态整体Kth 离散化后开一棵权值线段树,每个位置的值 ...

  7. .NET Core使用skiasharp文字头像生成方案(基于docker发布)

    一.问题背景 目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET FrameWork下我们已经习惯使用System.Drawing类库做简单的图像处理,到了.NET Core下一脸 ...

  8. 什么是Docker??

    ​​Docker是一个轻量级虚拟机,也是一种Linux容器,它突破了以往的沙盒技术,解放了应用部署,让PaaS的应用场景更为广泛. ​ docker是通过内核虚拟化技术((namespaces及cgr ...

  9. 如何使用mysqldump备份数据库

    一.背景 在开发项目中,数据库是核心资产.除了做主备冗余增加可靠性外,定期备份数据也是必须的. 使用mysqldump备份数据具有操作简单,备份和恢复时间短的优点(mysqldump备份数据生成的是批 ...

  10. 大三小学期 web前端开发的一些小经验

    1.html是页面的布局设计,就是页面上要放哪些东西,比如登录界面需要按钮,输入框等等:css是被用于使用设计部件和布局,例如哪些部件放在哪里,多宽多大,是否有边框等:js/jQuery是用于实现函数 ...